c# 基础学习

1、C#中的virtual、override

C# 是面向对象的程序设计语言,每一个函数都属于一个类。

当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。

当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。

例如,有一个类Test,Test类拥有两个方法Hello()和greet():
public class test
{
public void Hello()
{
System.Console.WriteLine("hello, world!");
}
.....
}
类TestMe派生自类Test,那么当你使用如下的代码:
Test a = new TestMe();
创建一个TestMe类的新实例后,假如你试图执行如下的代码:
a.Hello();
那么,自然就会运行基类Test的Hello()方法,但是如果你想给予派生类TestMe一个它自己的Hello()方法,你就要在Test类中将Hello()方法声明为虚拟的:
public virtual void Hello()
{
...
}
然后在派生类中以override关键字表示覆盖基类的方法:
public class TestMe : Test
{
...

public overrice void Hello()
{
System.Console.WriteLine("hello from TestMe class!!!");
}

....
}
这时调用a.Hello(),就会出现“hello from TestMe class!!!”字样,而不是“Hello,world!”说明基类的方法已经被覆盖了。这就是多态性的表现。

从上面不难看出,一个静态的方法是真实存在的,而一个虚拟方法可以被派生类重写,这二者是冲突的,其实对于一个方法,C#规定只能使用下面这些限定符中的一个:
override virtual static abstract sealed
代表的含义分别为:
重载函数、虚拟函数、静态函数、抽象函数、密封函数(不可派生)

另外,C#中定义一个方法的声明为:

可见性 类型 返回值 方法名(参数列表){方法体}

例如
public static void Test(int a){System.Console.WriteLine(a.ToString());}

这是一个公有的静态函数,函数名为Test,无返回值,有一个整形参数a,作用是把a的值输出在屏幕上。

 2、abstract

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
抽象类具有以下特性:

抽象类不能实例化。

抽象类可以包含抽象方法和抽象访问器。

不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。

从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。

在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。

抽象方法具有以下特性:

抽象方法是隐式的虚方法。

只允许在抽象类中使用抽象方法声明。

因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:

 复制代码
public abstract void MyMethod();

实现由一个重写方法override(C# 参考)提供,此重写方法是非抽象类的一个成员。

在抽象方法声明中使用 static 或 virtual 修饰符是错误的。

除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

在静态属性上使用 abstract 修饰符是错误的。

在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

抽象类必须为所有接口成员提供实现。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值