封装
用程序语言来形容现实中的对象
类和对象
1.类就是模板,对象就是用模板生成的事物
2.用类生成的对象实际上一个地址
3.用null关键字可以把地址覆盖,对象失去与关联的堆,则对象数据丢失
创建一个类和生成一个对象
//创建一个类
访问修饰符 class 类名
{
语句块
}
class student
{
语句块
}
//---------------------------------
//生成对象
类名 对象名 = new 类名();
student s = new student();
变量类型
值类型:里面存储真实的数值,一般放在栈上。例(整形,结构体)
应用类型:里面存储地址,一般放在堆上。例(字符串,类)
成员变量和访问修饰符
1.成员变量可以为任意类型 例
字符串类型
整形
枚举类型
类类型
数值类型
结构体类型
2.查看成员变量的初始值用default(int),int可以改成别的类型,引用类型默认为null
3.怎么判断是不是成员变量,如果是名词就是成员变量,动词就是成员方法
struct Position
{
}
enum E_SexType
{
Man,
Woman,
}
class Person
{
public string name; //字符串类型
public int age; //整形
public E_SexType sex; //枚举类型
public Person girgFriend; //类类型
public Person[] boyFriend; //数值类型
public Position pos; //结构体类型
}
3.修饰符有3p,不写默认为private
public :公共的,内部和外部都能访问和修改
private :私有的,只有内部才能访问和修改
protected :保护的,只有内部和子类才能访问和修改
//实例化一个对象,并给对象年龄赋值
Person p = new Person();
p.age = 20;
Console.WriteLine(p.age);
成员方法
1.成员方法声明,等于函数
2.成员方法用来表示对象的行为
//成员方法的声明
class Person
{
public string name;
public int age;
public void Run()
{
Console.WriteLine("{0} 正在跑", name);
}
}
//成员方法的使用
Person p = new Person();
p.name = "张三";
p.Run();
构造,析构,垃圾回收
构造函数
1.构造函数 必须有一个,默认为无参构造,利用重载,可以定义多个,实例化对象的时候默认会调用一次
2.构造函数作用,给成员变量赋初始值
3.分类:有参构造和无参构造
4.构造函数名要跟类名一样
class Person
{
public string name;
public int age;
//无参构造函数
public Person()
{
}
//有参构造函数
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public void Run()
{
Console.WriteLine("{0} 正在跑", name);
}
}
this关键字
1.this实际上是一个地址,是实例化对象的地址
2.当变量同名时,默认会以靠自己最近的变量的值为用
3.使用this关键字可以避免以最近的值为赋予
4.this关键字可以直接调用成员变量的值,而不是局部变量的值
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
析构函数
1.当引用类型的堆内存被回收时,会调用该函数
2.析构函数名要跟类名一样
3.前面要加~号
~Person()
{
}
垃圾回收
1.垃圾回收简称 GC
2.垃圾就是没有被任何对象或变量引用的数据
3.堆(Heap) : 用来存储程序员写的引用类型的数据,由程序员来进行控制
4.栈(steak) :用来存放值类型的数据,由系统进行控制
5.垃圾回收过程
先把有引用的对象或变量放在下一个内存区,然后再清理本内存
成员属性
前提 必须要在成员变量加private 或 protected 修饰符,成员属性才有意义
1.作用:用于保护成员变量,为成员变量的获取和赋值进行限定
class Person
{
private string name;
private int age;
//成员属性1
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
//成员属性2
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
}
2.get和set前面可以加修饰符,只能给其中的一个加,get是获取成员变量的值,set是设置成员变量的值
//用构造函数给成员变量赋值
Person p = new Person();
p.Name = "张三";
Console.WriteLine(p.Name);
3.value可以获取 等号(=) 后面的值,再把值赋值给成员变量
4.加get意味着外部可以获取成员变量的值,不加则不能,加set可以在外部设置成员属性的值,不加则不能设置
5.可以通过限定条件来决定需不需要赋值或返回值