private 访问权限最高,只能在本类中访问
proyected 访问权限中等,可以在子类中访问
public 访问权限最高、
、
this. ---指定当前对象
private 访问权限最高,只能在本类中访问
proyected 访问权限中等,可以在子类中访问
public 访问权限最高、
、
this. ---指定当前对象
在类名后面加上冒号 :加上继承父类的类名
栈空间比较小,但是读取速度快 ->商店
堆空间比较大,但是读取速度慢 ->仓库
栈的特征:
数据只能从栈的顶端插入和删除|
把数据放入栈顶称为入栈(push)
从栈顶删除数据称为出栈(pop)
-后进先出( Last In First Out )
堆
堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除
GC Garbage Collector垃圾回收器
CL R的GC就是内存管理机制,我们写程序不需要关心内存的使用,因为这些都是CLR帮
我们做了。
自动化创建
当你系统里没有创建一个属性
但定义了一个属性的简写方法,则系统会自动创建一个成员变量
(用于只读或只写)
public int Id
{
get;set;
}
//当没有的成员的定义去访问,则要通过属性去访问成员
Console.WriteLine("id:" + Id);
匿名类型
(根据你后面赋值来决定的)
var agv=20; ->整型
var name="小李" ->字符串类型
//定义一个学生类
class Studens
{
private string name;
private int agv;
private string sex;
private int id;
//定义一个name的get和set方法
//一、
public void setName(string name)
{
this.name = name;
}
public string getName()
{
return name;
}
//简写版
public string Name
{
get
{
return name;
}
set //value 参数
{
name = value;
}
}
public void Show()
{
Console.WriteLine("name:"+name);
Console.WriteLine("agv:" + agv);
Console.WriteLine("sex:" + sex);
Console.WriteLine("id:" + id);
}
public Studens()
{
}
public Studens(string name, int agv, string sex, int id)
{
this.name = name;
this.agv = agv;
this.sex = sex;
this.id = id;
}
}
static void Main(string[] args)
{
//调用刚创建类的对象
Studens stu = new Studens();
//stu.Show();
stu.setName("张三");
Console.WriteLine(stu.getName());
stu.Name = "李四";
Console.WriteLine(stu.Name);
}
class BaseClass{
利用类创建一个对象
static void Main(string[] args)
{
Console.WriteLine("请输入两个数字,每行一个");
//string number1 = "";
//int n1 = Convert.ToInt32(Console.ReadLine());
//string number2 = Console.ReadLine();
//在外面定义一个全局变量
int n1 = 0;
int n2 = 0;
//try
//{
// //在try里调用全局变量,来进行传值
// n1 = Convert.ToInt32(Console.ReadLine());
// n2 = Convert.ToInt32(Console.ReadLine());
//}catch (FormatException e)
//{
// Console.WriteLine("你输入的数据,不符合规则,请重新输入!");
// n1 = Convert.ToInt32(Console.ReadLine());
// n2 = Convert.ToInt32(Console.ReadLine());
//}
//上述代码还有问题 后面的用户输入没有进行异常检测,所以下述进行了完善
while (true)
{
try {
n1 = Convert.ToInt32(Console.ReadLine());
n2 = Convert.ToInt32(Console.ReadLine());
break;
}
catch (FormatException e)
{
Console.WriteLine("你输入的数据,不符合规则,请重新输入!");
}
}
Console.WriteLine(n1 + n2);
}
try{
//捕抓异常
}catch(){
//处理异常
catch块用来捕捉异常,当代码发生异常,那么异常的类型和catch块中的类型一样的时候,就会执行该catch块,如果catch块的参数不写,表示发生任何异常都执行这个catch块
}
finally{
不管代码有没有异常,都会执行
}
异常处理(捕捉异常) try ... catch ... finally语句
我们处理异常的语法结构如下(包含了三个关键字try catch finally)
如何查看自己的代码中有多少个断点;
调试-->窗口-->断点
Console.ReadLine(); 获取用户所输入的值;
正常模式下的调试∶
正常模式指的是不会影响程序的正常运行。
1,在VS中我们使用Console.Write(或者WriteLine)方法向控制台输出变量的值,通过这个我们可以查看变量的值是否符合我们的预期来调试错误。
2,在Unity中我们使用Debug.Log("") Debug.LogError("") Debug.LogWarn(""),向unity的console窗口输出信息,帮助我们调试错误。
设置属性的只读或者只写 private string name; public string name{ get{ return name; } }
属性可以值只提供⼀个set块或者get块
2、属性的访问修饰符 public string name{ get{ return name; } private set{ name = value; } }
3、⾃动实现的属性 public int Age{get;set;} 编译器会⾃动创建private int age属性
异常检测代码
try{
//可能出现异常的代码
}
catch(){
//需要捕捉的异常
}
属性
private int age;
public int Age//这个可以随意命名
{
get
{
}
set
{
}
}
外部引用属性来赋值或取值该属性所在类对应的变量
空对象不能去引用其他
new总是用来初始化的
ToString默认情况下输出类的完整路径
结构体声明对象不必new,除非想初始化
继承接口,就算有方法没调用也要实现接口中所有的方法
Student stu1=new Student(18,"小芳");
Student stu2=new Student(25,"小刚");
stu2=stu1;\\当Student是struct结构体时,赋值值;是类Class时,赋值引用地址
当一个对象没人引用时就成了内存垃圾
字符串存储在静态存储区