1.可以用于类,方法,属性,事件和索引指示器,表示其为抽象成员;
2.用abstract修饰的方法不可以声明主体;
3.只要类中有abstract修饰的成员,该类就必须声明为abstract的;
4.abstract修饰的类不可以实例化实体;
5.abstract类中的abstract成员可以由子类override;
6.abstract修饰符用来强制继承类必须实现某一成员。
virtual:
1.用virtual修饰的方法必须声明实体;
2.父类中的virtual成员可以由子类override;
3.用父类声明一个变量指向子类的实体,如果子类override了父类中的virtual方法,那么执行子类中的方法,否则执行父类中的方法
(如果父类中该方法不声明为virtual,也可以被子类继承,但是如果子类中有签名相同的方法,那么这里相当于子类隐藏了父类的该方法,
即相当于使用了修饰符new,这时用父类声明一个变量指向子类的实体,执行该方法将执行父类的方法);
4.用来实现多态。
override:
1.用来重写成员;
2.类中override修饰的成员,其子类中可以继续override。
virtual
和
abstract
都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。
它们有一个共同点:如果用来修饰方法,前面
必须
添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的。毕竟加上
virtual
或
abstract
就是让子类重新定义的,而private成员是不能被子类访问的。
但是它们的区别很大。(
virtual
是“虚拟的”,
abstract
是“抽象...
当在页面cs文件中,写类属性时,运行会碰到以下问题:CS0501: “ASP.default_aspx.Person.Level.get”
必须
声明
主体
,因为它未标记为
abstract
或 extern。如图所示:
这是因为在vs2005中是不允许这样写的,
必须
对get、set方法进行返回值或赋值。如下:
public class Person
virtual
是实现C++多态的关键性条件:C++使用关键字
virtual
来修饰类中的方法,被修饰的方法可以在子类中重写,如此便覆盖基类方法,以实现相同的行为却不同的功能;多继承情况下的基类析构函数通常
声明
为
virtual
(虚方法),这样做的好处是:确保正确的析构顺序——基类对象的析构晚于子类对象。除此之外,如果基类中至少有一个函数被
声明
为纯虚函数(
virtual
void func()= 0;),那么这个基类为抽象基类,如此它便不能实例对象,并且
必须
在其派生类中对纯虚函数进行实现,而基类只能
声明
而不能实现
static void Main(string[] args);struct APoint//描述点数据的结构{public int X;//x坐标public int Y;//y坐标public APoint(int point_X, int point_Y)//带参数的构造函数{this.X = point_X;this.Y = point_Y;}public void Move(int of...
<br />类就是用class来
声明
的。class的语法如下:<br /><类的访问修饰符> class 类名<br />{<br />//类的
主体
<br />}<br />除class关键字和类名外,访问修饰符是可选项。下面以汽车为例
声明
一个类,代码如下:<br />public class Car<br />{<br />//汽车属性和方法<br />}<br />类命名要遵循的编码规则:<br />类命名应该采用帕斯卡命名法,即首字母大写。通常命名类采用完整的英文单词,如Book,Car,Teache
C#
基础知识之八
由朱朱编写,转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688
1、 枚举数类型有3种:非泛型接口(IEnumerator/IEnumerable接口)、泛型接口(IEnumerator/IEnumerable接口)、不使用接口。
2、 IEnumerator接口包含3个函数成员:current返回当前位置项(只读属性),movenext把
如果一个函数的
主体
,仅有一条语句,且这条语句不是流程控制语句。那么可以把函数
主体
的大括号,改为=>表示。如果是有返回值的函数,那么这连return也可以省略。这同样可以适用于访问器。然而,一般不建议对函数使用这种简写方式。因为难以判断这个函数的边界。而属性自体有一对大括号,内部的访问器种类也有限,较为容易判断。