一, 类与对象的区别和联系
- 1、类与对象的概念
类:是具有相同数据结构和相同操作的对象的集合
对象:是类的实例化,一切皆对象。
2、类与对象的存在方式
类:是抽象的概念,是模版,确定对象将会拥有的特征(属性)和行为(方法),比如说人类、汽车
对象:是一个你能够看得到、摸到着的具体的实体,比如说张三、张三的车
3、类与对象的属性和方法
属性:对象具有的各种特征,每个对象的每个属性都拥有特定值 - 方法:对象执行的操作
- 4、类不占内存,对象才占内存
- 5、类是对象的类型,比如定义了一个类,对其的实例化就是在用类这个类型来定义一
二 , 类
1,类的声明
[访问修饰符]class 类名{成员;.....}
例如:
Class student //声明一个student类 { public string name;//属性 public char sex; public int age; public void sayHello()//方法 { Console.writeline(); } }
2, 类的成员
1)字段:例如private string name;
(2)属性:通俗点说,就是定义一个public的具有get、set方法的变量,这个变量是用于保护一个私有变量,可以例如上面的name字段,可以通过点击右键重构中的封装,然后出现get
例如
private string _name; //字段 public string Name //属性 { get{ return _name;}//可读 set{_name=value;}//可写 }
(3)类的方法
A、普通方法
[修饰符] 返回类型 方法名(形参列表)
{
方法体
}
B、构造方法
(A)、构造方法是一个特殊的方法,它的名字和类的名字相同,并且没有返回值,连void都可以省略不写。
(B)、当我们定义好一个类之后,如果我们没有写构造方法,那么系统会自动给我们加上一个默认的没有参数的构造方法,在这个构造方法中什么也不做,我们也看不到,可是当我们一旦手写一个构造方法后,系统原先默认给我们添加的那个没有参数的构造方法就不会再给我们添加了。
(C)、使用构造方法的好处:
a、对多个属性进行赋值时,不需要重复的写实例名
b、可以保证用户在new一个对象的时候必须对某一个属性进行赋值
c、在创建对象时,对只读属性进行初始化
D)构造方法可以有参数,new对象的时候传递参数即可
例如
public Student(string name,char sex , int age) { this.Name=name; this,Sex=sex; this.Age=age; } static void Main(string [] args) { Student s=new Student("张三" , "女" , 18); }
(E)构造方法可以重载,也就是又多个参数不同的构造方法,例如以下代码:
char sex; int chinese; int math; int english; public Student(string name, char sex, int age) { this. name=name; this.age=age; this.sex=sex; } public Student(string name,char sex,int age,int chinese,int math,int eglish) { this.name=name; this.sex=sex; this.age=age; this.chinese=chinese; this.math=math; this.eglish=eglish; }
3、类成员的访问修饰符
Public : 同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
Private ; 该类成员至鞥在本类中被访问,在类中定义变量或者方法的时候,没有写访问修饰符默认是private
protected ; 只能由该类和由此类的派生类中的代码才可以访问
internal ; 同一程序集中的代码或者气子类代码可以访问,其他程序集代码不可以
默认访问修饰符
1):类或结构的默认访问类型是internal.
2):类中所有的成员,默认均为private。
3):接口默认访问符是internal
4):接口的成员默认访问修饰符是public,也不可能是其他访问修饰符
5):命名空间,枚举类型成员默认public,也不可能是其他访问修饰符
6):委托,默认internal
7):在命名空间内部或编译单元顶部的所有类型,默认是internal,可以人为改为public。
四、静态与非静态数据成员
1、由Static修饰的类的方法或属性,称为静态的数据,由于在一个类中只开辟了一块内存空间存储,并在类的所有对象实例间共享,它不依赖于具体的对象,因此直接通过类名访问,而不是通过类的对象实例访问的
2、而不由static修饰的方法或属性,称为非静态数据,必须先实例化,再通过实例名.方法名或实例名.属性名来访问
上面的代码参数的名和数据成员的名正好相同,通过使用this关键字来区分哪个是参数,哪个是数据成员,此时this关键字指向当前的对象,所以带this的是类的数据成员,而不带的this的是参数