C#中的virtual、override、static

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的值输出在屏幕上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#,`override`关键字用于在派生类重写基类的虚方法、属性或索引器。通过使用`override`关键字,我们可以在派生类提供自己的实现,覆盖基类的默认实现。 要使用`override`关键字,需要满足以下条件: 1. 基类的方法、属性或索引器必须被声明为`virtual`或`abstract`。 2. 派生类的方法、属性或索引器必须具有相同的名称、返回类型和参数列表。 下面是一个示例,演示了如何在派生类使用`override`关键字来重写基类的虚方法: ```csharp class Animal { public virtual void MakeSound() { Console.WriteLine("The animal makes a sound"); } } class Dog : Animal { public override void MakeSound() { Console.WriteLine("The dog barks"); } } class Program { static void Main(string[] args) { Animal animal = new Animal(); animal.MakeSound(); // 输出: The animal makes a sound Dog dog = new Dog(); dog.MakeSound(); // 输出: The dog barks Animal animalDog = new Dog(); animalDog.MakeSound(); // 输出: The dog barks } } ``` 在上面的示例,`Animal`类的`MakeSound`方法被声明为`virtual`,表示它可以被派生类重写。`Dog`类继承自`Animal`类,并使用`override`关键字重写了`MakeSound`方法。在`Main`方法,我们创建了一个`Animal`对象和一个`Dog`对象,并分别调用它们的`MakeSound`方法。由于`Dog`类重写了`MakeSound`方法,所以在调用`dog.MakeSound()`时输出的是"The dog barks"。 此外,还可以使用`override`关键字重写基类的属性和索引器。重写属性和索引器的语法与重写方法类似。 希望这个例子能够帮助你理解`override`关键字在C#的用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值