internal:只能在本程序集中被访问
7、属性
(1)通常情况下,属性的开头字母大写,而对应字段的开头字母小写。
语法(例):
class Person
{
}
上述代码中,如删除get或set方法,即可成为只写或只读属性,get,set都可以设置访问级别。
(2)
在没有特殊逻辑代码的情况下,上述的代码可简写成public string Name{get;set;}
8、构造函数
语法(例):
class Person
{
}
(1)构造函数的函数名与类名相同,没有返回值,连void都不需要写,构造函数的作用是强制用户在声明实例的时候传入参数,如上代码中,用户在定义一个新的Person实例时必须输入实例的姓名参数,而由于姓名属性是只读属性,因此在传入参数完成之后,实例的姓名是无法改变的。
(2)在定义类时,即使类中没有构造函数,系统也会自动帮我们生成一个没有参数的构造函数,而当我们自己定义了构造函数之后,这个无参的构造函数就不再存在了。
(3)构造函数可以有重载,如:
class Person
{
}
如上,Person类有了两个构造函数,即只有一个name参数的构造函数和有两个参数name,age的构造函数,这两个构造函数之间的关系就叫做重载。
子类调用父类的构造函数:
1、构造函数不继承,派生类会自动调用基类构造函数。
2、若类内没有定义构造函数,系统会自动隐式生成一个不带参数的构造函数,比如定义一个类:
public class A
{
}
可以理解为它已经存在一个如下的构造函数
public class A
{
}
3、派生类构造函数自动调用基类的不带参数的构造函数,注意下面的格式
public class B:A
{
}
相当于
public class B:A
{
}
3、基类中带参数的构造函数必须显式调用,比如:
public class A
{
}
public class B:A
{
}
4、如果基类中有参数为0个的构造函数,那么派生类中可以不写构造函数,默认调用基类中无参的构造函数
public class A
{
}
public class B:A
{
}
9、多态:多态就是对象可以表现多个类型的能力
(1)重写父类中的方法:
当子类和父类的方法重名时,会报绿线警告,去掉绿线的方法:
①在子类方法的访问修饰符(public)后加上new
②在父类方法的访问修饰符后加上virtual,即定义为虚方法,在子类中重写这个方法时,在访问修饰符后加上override
在重写虚方法时要注意:
方法不能用static修饰
子类中方法重写时必须与父类中方法的签名(即返回值和参数)一致
virtual不能与private一起使用
常见的虚方法:
Equal()
ToString()
GetHashCode()
(2)抽象类和抽象方法:
①如果在一个类中有一个方法的访问修饰符后加了abstract,那么这个方法就叫做抽象方法,相应的类名前也要加上abstract,这个类就成了抽象类,注意抽象方法没有方法体,抽象类不能被实例化。
②如果一个类继承了抽象类,那么在这个子类中必须重写父类中的抽象方法,实现抽象方法的方法体。
10、接口
语法:
[访问修饰符] interface 接口名
{
}
(1)定义:interface关键字,接口中可以有属性、方法(不写方法体)。
(2)接口的名称通常以I开头,如IList
(3)如果一个类继承了其他类同时又实现了接口,
(4)接口和类的异同
不同点:
接口不能直接实例化;
接口中不包含方法的实现;
接口可以多继承,类只能单继承;
相同点:
接口、类、结构都可以实现多个接口
接口类似于抽象基类,任何继承(实现)接口的非抽象类型都必须实现接口的所有抽象成员
接口和类都可以包含事件,索引器,方法和属性
类不支持多重继承,而接口支持。类对接口叫实现,不叫继承,类好比是爹,接口是能力,一个人可以有多种能力但不会有多个爹。