1、类和对象
① 类:类是一个模子,确定对象将会拥有的特征(属性)和行为(方法)。
类的三大特征:封装性、继承性、多态性。
类的定义:
[访问修饰符] class 类名
{
成员
}
其中的访问修饰符:
private:私有成员,在类的内部才可以访问
protected:保护成员,在类内部和继承类中可以访问
public:公共成员,完全公开,没有访问限制
internal:当前程序集内可以访问
类的实例化对象语法:类 实例名=new 类()
类的成员的访问:实例名.属性 实例名.方法名()
类的属性:
属性的定义:get,set
属性是为了保护与之相对应的字段的,保证对字段的读取和复制符合要求
属性可以分为:读写、只读、只写。
允许外部访问的变量一定要声明为属性
属性和public字段的区别是什么?
属性可以对设值、取值的过程进行非法值控制,比如年龄禁止设置负数,而字段则不能进行这样的设置。
调用set方法为一个属性设置值,然后用get方法读取出来的值一定是set进去的值吗?
虽然一般情况下get读取的值就是set设置的值,但是可以让get读取的值不是set设置的值的
② 对象:看得见,摸得着,具体的,特指的。是类的一个实例化
③ 类与对对象的关系如图所示:
④ 类的实例化例子:
//================================Person类里面的代码======================================
public class Person
{
private string _name;//字段,访问修饰符private,那么这个字段就是私有的外边不能访问,
//属性,通过属性,在外面或者其他地方进行访问
public string Name
{
get { return _name; }//读,可以读set赋的值,也可以直接设置读的值
set { _name = value; }//写
}
private int _age;
public int Age
{
get
{
return _age;
if (_age>=0 && _age<=150)//在读值的时候对年龄进行限制
{
return _age;
}
else
{
return 18;
}
}
set { _age = value; }//在写的时候也可以进行限制
}
public void SayHello()//person类里面的方法
{
Console.WriteLine("hello 大家好,我是人,年龄是{0}",_age);
}
}
//====================================Program里面的代码======================================
static void Main(string[] args)
{
Person per = new Person();//实例化这个类
per.Name = "张三";//赋值
per.Age = 19;
per.SayHello();//调用person里面的方法
Console.WriteLine(per.Age);//读值
Console.ReadKey();
}
2、构造函数
① 类的构造方法:用来创建对象,并且在构造函数中对对象进行初始化
② 构造函数:用来创建对象的特殊方法,方法名和类名相同,没有返回值,连void都不用
③ 构造函数的特点:
构造函数可以有参数,new对象的时候传递函数参数即可
如果类不指定构造函数,则有一个默认的无参数的构造函数
如果类指定了有参数的构造函数,则不再有默认的无参数的构造函数,如果需要无参数的构造函数,需要自己来写
构造参数可以重载,也就是有多个不同的构造函数
④ 使用构造方法可以解决的问题
在赋初值时,重复书写对象名
假如有一个属性,不允许用户改动,我们可以把这个属性定义为只读类型的属性,只读类型的属性不能实例化,可以使用构造方法来初始化
⑤ 构造函数的例子:构造函数的重载
//=======================================Person类的代码=========================================
class Person
{
public Person(string name, char gender, int age)//构造函数,有参数的
{
this._name = name;//this只是代词
this._gender = gender;
this._age = age;
}
public Person()//构造函数的重载,无参数的
{
}
//下面是属性和方法
private string _name;
public string Name
{
get { return _name; }
}
private char _gender;
public char Gender
{
get { return _gender; }
}
private int _age;
public int Age
{
get { return _age; }
}
public void show()
{
Console.WriteLine("{0}岁的{1}在世界上", _age, _name, _gender);
}
}
//========================================Program的代码=========================================
static void Main(string[] args)
{
Person per = new Person("张三",'男',18);//使用有参数的构造函数
per.show();//调用类的方法
Console.ReadKey();
}
3、析够函数——在程序被执行时调用的
特点:
不能再结构中定义析够函数,只能对类使用析够函数
② 一个类只能有一个析够函数
③ 无法继承或重载析够函数
④ 无法调用析够函数,它们是自动被调用的
⑤ 析够函数既没有修饰符,也没有参数
例子:
//析够函数
~Person()
{
Console.WriteLine("嘿嘿,我被调用了");
}