1.1、类的概念:类是一个模板,确定了一个对象应该有的属性与方法,简单理解就是属性相当于一个人的特征,而方法相当于一个人的行为,在资源管理器中添加新类
1.2、在新建好一个类后在类之前添加一个public
1.3、类的语法 [访问修饰符] class 类名 { 类的成员;(字段,属性,方法) } 访问修饰符:public 类名:书写规则是要求每个单词的首字母都要大写
1.4、类的实例化(创建对象):我们写好一个类之后,需要创建这个类的对象 使用关键字new来创建,必须写在main函数中 类名 对象名=new 类名();
1.5、字段:在类中存储数据 写法:修饰符 _字段名 给新建对象赋值:新建对象名. _字段名()
1.6、类中的成员如果不加访问修饰符,默认是private private:私有的,表明只能在类的内部访问,出了这个类之后, 就访问不到了,若想在类外访问就要加public 在类中写的方法,若有static则为静态方法,没有则非静态
1.7、在类中写方法若想输出对象的值:this._字段名(this表示当前这个类的对象,this的作用是用来输出字段的值)
1.8、类是不占内存的,而对象是占内存的
下面是例题代码 Person代码块
namespace 第九天练习代码 { public class Person { public string _name; public int _age; public char _gender; public void SayHello() { Console.WriteLine("大家好,我叫{0},我今年{1}岁,我是{2}生",this._name,this._age,this._gender); } } }Program代码块
class Program { static void Main(string[] args) { Person isPerson = new Person(); isPerson._age = 18; isPerson._name = "张三"; isPerson._gender = '男'; isPerson.SayHello(); Console.ReadKey(); } }2.1、在一个类中应该给每个字段都去配备一个属性,属性就是为了保护字段,对字段的取值和设置进行一个设定,那么相应的在声明字段时就不能添加public,是为了保证数据是一个隐私状态,而在第一节中添加了public是因为当时没有引入类的属性,那么相应了在类的方法中赋值要改为this.属性名,属性的本质是由于两个方法组成的 属性的语法: public string 命名 { get{ return 字段 } 当取值时用get方法 set{ 字段=value; } 当给属性赋值时用set方法 } 2.2、字段就是女人,属性就是男人。说明属性是为了保护字段
Person 代码块
public class Person { string _name; public string Name { get { return _name;} set { _name = value; } } int _age; public int Age { set { _age = value; } get { return _age; } } char _gender; public char Gender { set { _gender = value; } get { return _gender; } } public void SayHello() { Console.WriteLine("大家好,我叫{0},我今年{1},我是{2}生", this.Name, this.Age, this.Gender); } }Program代码块
Person Aperson=new Person(); Aperson.Age = 18; Aperson.Gender = '男'; Aperson.Name = "张三"; Aperson.SayHello(); Console.ReadKey();2.3、属性分为三种 既有get方法也有set方法的属性我们称之为可读可写属性 只有get方法没有set方法我们称之为只读属性 只有set方法没有get方法我们称之为只写属性
2.4、当输入的值出现异常时,可以在get,set方法中添加判断语句,通常只在其中之一添加判断语句
2.5、类的练习题:student 定义一个学生类,有六个属性,分别为姓名、性别、年龄、语文、数学、英语成绩。 有2个方法: 一个打招呼的方法:介绍自己叫XX,今年几岁了。是男同学还是女同学。 两个计算自己总分数和平均分的方法。{显示:我叫XX,这次考试总成绩为X分,平均成绩为X分} 实化两个对象并测试: 张三 男 18 三科成绩为:90 95 80 小兰 女 16 三科成绩为:95 85 100
3.1、主要作用就是对,对象进行初始化(在类中来创建) 3.2、构造函数其实就是一个函数,只不过是一个特殊的函数。 语法: public 构造函数名(传入参数:数据类型 字段名) { 代码(判断条件); this.字段=字段名; } 没有返回值,连void都不能写,构造函数的名称必须和类名一致 3.3、调用构造函数 new的作用: 1)、在内存的堆中开辟空间 2)、在开辟的堆空间中创建对象 3)、调用对象的构造函数 3.4、在创建构造函数之后,就可以在创建类的对象中填入所需要的数据 类名 对象名=new 类名(字段的数据); 而这样做就可以避免重复调用属性来输入数据 3.5、1)、可以重载(方法的名称相同但方法的参数不同,参数个数相同但类型不同或参数类型相同但个数不同 ) 2)、类中默认会有一个无参数的构造函数,当你写了一个新的构造函数后,那个默认的无参数的 构造函数就被干掉了
4.1、值类型:int double char bool decimal struct enum 引用类型:string 数组 自定义类 4.2、常用的内存:堆 栈 静态存储区域 值类型是存在栈中,引用类型是存在栈中
5.1、静态成员需要被static修饰,非静态成员不需要加static。 5.2、问题1:在一个非静态类中,是否允许出现静态成员? 答:非静态类中是可以出现静态成员的。 问题2:在非静态函数中,能不能够访问到静态成员? 答:在非静态函数中,既可以访问到非静态成员,也可以访问到静态成员。 问题3:在静态函数中,能不能够访问到非静态成员? 答:静态方法只能够访问到静态成员。 问题4:在静态类中能否出现非静态成员? 答:不可以,在静态类中,只允许出现静态成员。 5.3、在调用上,静态和非静态的区别 1、在调用实例成员的时候,需要使用对象去调用 2、在调用静态成员的时候,必须使用类名.静态成员名; 3、静态类是不允许创建对象的
6.1、GC Gargbage Collection 当我们程序结束之后,GC会扫描整个内存,发现,如果有的空间没有被指向, 则马上自动把这块空间销毁。
问题: 写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据距离distance计算价格Price (1元/公里): 0-100公里 票价不打折 101-200公里 总额打9.5折 201-300公里 总额打9折 300公里以上 总额打8折 有一个方法,可以显示这张票的信息. 测试上面的类
Ticked类代码块
class Ticked { double _distance; public double Distance { get { return _distance; } } //构造函数 public Ticked(double distance) { if (distance < 0) { distance = 0; } this._distance = distance; } double _price; public double Price { get { if (_distance >= 0&&_distance<=100) { return _distance * 1.0; } else if(_distance>=101&&_distance<=200) { return _distance * 0.95; } else if (_distance >= 201 && _distance <= 300) { return _distance * 0.9; } else { return _distance * 0.8; } } } public void ShowTicket() { Console.WriteLine("{0}公里需要{1}元", this.Distance, this.Price); } }Program代码块
class Program { static void Main(string[] args) { Ticked t = new Ticked(150); t.ShowTicket(); Console.ReadKey(); } }8.1、在一个项目中引用另一个项目的类的步骤 1、添加要引用的类所在的项目。 2、引用命名空间(在最上端using处添加using namspace后面的代码;) 8.2、访问修饰符 public :公开的,公共的 private:私有的,只能在类的内部访问,出了这个类之后,就访问不到了。 能够修饰类的访问修饰符只有两个: 1)、public 2)、internal:表示只能在当前程序集的内部进行访问,出了这个程序集就访问不到啦。 对于咱们而言,现阶段就将程序集理解为当前项目。