首页 > 代码库 > C#基础知识篇(四)-----------C#笔记
C#基础知识篇(四)-----------C#笔记
一.类
1. 什么叫做类?
类是具有相同特征的一类事物统称。所以类是一种抽象,即不是一个实体(我们把类看做模板)。
2. 什么叫做对象?
对象是根据类的模板创造出来的一个实体,它具有类里所有的特征,一个也多不得,一个也少不得。少了就不叫这个类的成员了,多了也不是!假如张三有变身这个功能,那么张三就不属于人。
记住对象是根据模板创建的,模板有什么它就有什么,不会多也不会少!
3. 什么叫做字段(或者是成员变量)?
我们把定义在方法的外面,类的里面(即:类中)的变量称之为字段或者说是成员变量。
4. 类的定义:(通过class关键字创建)
Class 类名
{
类的成员;
}注意:类是抽象的不能直接使用,我们只能创建类的对象以后才能使用。(理解:好比类就是我们建房子的图纸,你总不能对你老婆说我买房了,老婆问你房呢?然后你就给她一张纸,后果你想….)
5. 创建类的对象
语法:类名 对象名=new 类名();
注意:其中new关键字在上面这句话中做了四件事:
1> 首先new关键字在堆空间里开辟一块合适大小的空间。
2> 按照类的模板创建类的对象。
3> 调用构造函数
4> 返回对象在堆空间的内存地址。
6. 访问类的成员:
语法:对象名.成员。通过上述语法来访问类的属性成员和方法。
7. 类的数据类型和this关键字
a. 根据创建对象的语法和原理(即在内存中的结构)我们可以知道:类是一种引用类型。
b. this关键字是代表当前实例的(或者当前对象的)。
二.命名空间
1. 命名空间的作用?
命名空间主要是用于解决类的重名。
2. 快速引进命名空间的方法:类名(保证正确)右键->解析。
3. 如果多个类在同一命名空间我们则不需要using引进命名空间,直接创建对象实例来调用类成员。
4. 我们可以修该默认的namespace名,不要认为在相同文件夹下就不用using,主要看命名空间是否相同,相同就不需要,不相同就要引进命名空间。
5. 在代码中使用其他类的时候,需要using引进类命名空间然后再使用。
三.访问修饰符
一. 类的成员访问修饰符
1> public 公有的,public是最高权限可以在任何地方访问。
2> private 私有的,只能在本类中访问。
3> internal 只能在当前程序集中访问。不能跨程序集访问。
4> protected 受保护的,只能在本类和子类中访问,除了自己所在的类和子类就不能访问的到。
5> 注意:类的成员默认访问级别是private
二. 类的访问修饰符
1> public修饰的类可以在任意地方访问,但还是要遵行:引进命名空间->创建类的对象->访问类的成员。
2> internal 修饰的类只能在当前程序集中访问。
3> 注意:如果类没有写访问修饰符,那么默认的则是:internal;记住类没有private和protected修饰符(理解:被private修饰的成员只能被当前类的内部使用,若修饰类则在类的内部访问?
可有意义?若你写的类不想被访问只想自己用?哪你写类的意义何在?类就是把相同特征的事物封装起来供重复使用),若代码在整个程序中只执行一次完全可写在Main方法中)。
四.属性
一. 语法:
[访问修饰符] 属性数据类型 属性名
{
get
{
return 值;
}
set
{
字段名 = value;
}
}
简写:[访问修饰符] 属性数据类型 属性名{get;set;}
二. 属性的赋值和取值
1> 在set方法中可以通过关键字value得到用户赋的值。
2> 取值是通过get方法中return返回。
3> 属性的本质是两个方法。
4> 属性不能存值,值是存在字段中的。若用简写我们的vs编译器会自动帮我们生成两个私有字段,实质上操作的还是字段。
五.对象的初始化器
一. 语法:
如:Person p=new Person(){name=”tom”,age=18}
1> 在大括号中为创建的对象各个属性赋值,每个属性用逗号分隔;
2> 在使用对象初始化器为对象赋值时,若调用的是无参构造函数时,那么后面的“()”可以省略。
例:person p=new person{name=”tom”,age=18}
3> 后面“()”能省略的前提:
a.必须是使用对象初始化器为属性赋值。
b.必须是调用的无参构造函数,有参构造函数就不行会报错。
4> 对象初始化器可以给对象全部赋值也可以只给部分赋值,还有什么都不做。
例:person p=new person{};(是合法的)
六.构造函数
一. 语法:
[访问修饰符] 类名(参数)
{
函数体;
}1> 访问修饰符一般是public.
2> 构造函数没有返回值,连void都不用。
3> 构造函数可以重载(即可带参数),在new对象的时候传递参数即可。
4> 如果没定义构造函数,则系统会有一个默认的构造函数(无参),如果定义了构造函数(不管有参没参)系统则不会再给我们定义默认的构造函数。
5> 构造函数在创建对象的时候被new关键字调用执行,构造函数不能被程序员手动调用。构造函数中可以调用普通方法,普通方法不能调用构造函数(只能在创建对象时被new调用)。
6> 构造函数特点:创建对象的同时构造函数中的代码自动执行。
7> 构造函数的作用:一般情况下用来给对象的字段或属性赋值。哪怕字段带了初始值这个赋值过程也是在构造函数中来完成的!若没带初始值则在执行构造函数时,给字段赋默认值,
值类型=0,引用类型=null。即构造函数是用来初始化对象的。
8> 构造函数之间是可以相互调用的
语法: A构造函数():this(参数) //B构造函数
{
方法体;
}根据“:this(参数)“来调用,编译器会根据this后面括号里面的参数来匹配所调用的构造函数。
执行过程:
1> 先调用A构造函数
2> 再调用B构造函数
3> 先执行B构造函数
4> 再执行A构造函数
注意:在给B(被调用的构造函数)构造函数传参数时,要么给常量值要么给A(本构造函数)构造函数的参数,不能给字段!一个构造函数只能调用一个构造函数(不能掉2个或以上)。
七.部分类
一. 在同一个命名空间下,不能定义多个类名相同的类,因为这样会起冲突。但是在同一命名空间下如果定义了多个类名相同的类但他们都被partial修饰了,这样是可以的。因为他们本质上是同一个类(部分类或者伙伴类)。
因为C#编译器会把他们编译为一个类,所以你才可以在一个部分类中使用另一个部分类的成员。
二.满足部分类的条件:
1>在同一命名空间。
2>类名相同。
3>类都被partial修饰
三.部分类的作用:方便管理,如:定义一个人类,这个类可能有1万个字段,我们可以把他们放在一个子类中,便于管理和维护。