结构成员无法声明为受保护成员,因为结构不支持继承
类的readonly对象只能在相应的构造函数中初始化(静态的在静态构造函数中初始化,非静态在非静态构造函数中初始化)或者在定义时用初始化
自动属性,不能关联类的成员变量,只能通过属性访问数据,例子:
Public int MyIntProp
{
Get;
Set;
}
因为set和get没有实现代码,所以我们只能访问属性的数据,而不能访问相关的字段
对类图添加方法、属性、字段和事件等时,输入相应的变量名,然后按Tab键,进行后续设置,如变量类型,参数
New关键字可以实现成员的隐藏,例子:new public void DoSth(),其中,DoSth方法是基类的非虚方法
如果用子类对基类进行赋值,则用基类调用和子类相同的声明的函数时,其内部this为子类的this,这个切记
定义嵌套类时,可以使用private和protected,而不仅限于public和internal访问修饰符
接口的函数成员和属性默认的都是公有抽象的
类继承接口后,有两种实现接口成员函数和属性的方式。一种是隐式实现,另一种是显示实现,不过显示实现时,需要定义接口然后才能调用函数,即必须通过接口变量来调用函数,不能通过类来访问,而且实现接口函数时,不能有访问控制符(private、protected等),即在显式接口声明上不允许使用public 关键字。在这种情况下,请从显式接口声明中移除 public 关键字。例子:
//定义一个接口
interfaceIDemo
{
voidPrintInfo();
}
//Base类
classBase
{
publicvoid PrintInfo()
{
Console.WriteLine("这个是打印函数!");
}
}
interfaceIDemo1
{
voidPrintIDemo1();
}
//Base的子类
classDerive :Base,IDemo,IDemo1
{
protectedclassnestDerive
{
// 嵌套类
}
voidIDemo1.PrintIDemo1() 注意不能用访问修饰符修饰
{
Console.WriteLine("这个函数是IDemo1接口的打印函数!!!");
}
}
类继承接口,并显示实现接口的属性时,不能添加接口中没有声明的访问器(set,get),不过隐式实现时可以增加访问器。同样显示实现接口属性接口时,不能加访问控制符(public等)。例子:
interface IDemo1
{
intIntNum
{
get;
}
}
// Base的子类
class Derive : Base,IDemo,IDemo1
{
protected intintNum;
//隐式实现接口属性
//publicint IntNum
//{
// set
// {
// intNum = value;
// }
// get
// {
// return intNum;
// }
//}
//显示实现接口属性
intIDemo1.IntNum
{
get
{
return intNum;
}
//显示实现接口的属性时,不能添加接口没有的访问器(set,get)
//protectedset
//{
// intNum = value;
//}
}
}
部分类和部分函数的定义和使用。其定义主要涉及到partial关键字,例子:public partial class MyClass。部分类的使用可以让一个繁琐类中的属性、字段以及方法分别放在不同文件中。部分方法的使用,部分方法可以是静态的和非静态的,但是他们总是是私有的,且不能有返回值,参数能是ref型,不能是out型,virtual、abstract、override、new、sealed和extern修饰符都不能修饰部分函数。对于部分方法,编译器在编译代码,如果部分函数的实现体没有定义,编译器会完全删除该方法,还会删除对该方法的所有调用。所以要求部分函数不能有返回值,因为编译器要删除对该方法的所有调用。
注意VS中工具的使用
集合中的类型是Object类型的。例如:ArrayList集合是System.Object对象的集合。
Foreach循环的过程,设迭代集合是collectionObject。其执行过程为:调用collectionObject.GetEnumerator()函数,返回IEnumerator对象的引用,然后调用IEnumertor的MoveNext方法,并判断返回值是否为真,为真,则调用IEnumerator的Current属性来获取当前值,然后重复前两步,如果为假则结束循环。
CollectionBase有个List属性,DictionaryBase集合的GetEnumerator方法的返回值与DictionaryEntry结构的关系
使用IEnumerable和IEnumerator这两个类型的场合是:
1、如果要迭代一个类,可使用方法GetEnumerator(),其返回类型是IEnumerator
2、如果要迭代一个类成员,例如一个方法,则使用IEnumerable。
要实现深度复制,最好继承ICloneable接口,主要实现其Clone方法
Is运算符不是说明对象是某种类型的一种方式,而是可以检查对象是否是给定的类型或者是否可以转换为给定的类型,如果是,就返回True
SystemException和ApplicationException异常,前者是预定义的异常类的基类,后者是定制异常的基类。
Timer类,其带参构造函数中参数表示Timer事件发生的时间间隔,其中Timer..::.Elapsed事件的事件间隔是构造函数指定的值,即:达到间隔时发生。
事件只能用+=和-=来操作事件