本文共 2332 字,大约阅读时间需要 7 分钟。
在C#中,virtual关键字用于定义虚拟成员,这些成员可以在子类中重写。默认情况下,类中的成员是非虚拟的。如果需要子类能够重写父类成员,需要在父类中使用virtual修饰这些成员。虚拟成员允许子类在不改变父类方法签名的情况下,重新实现父类的行为。
virtual修饰属性属性可以使用virtual关键字修饰,如下所示:
public virtual string PropertyName { get; set; } virtual修饰方法方法可以使用virtual修饰,如下所示:
public virtual void MethodName(){ // 方法体} virtual关键字不能修饰static修饰的成员。virtual关键字可以放在访问修饰符的前面或后面,但一般习惯将其放在后面。override关键字修饰。override和virtual的区别在于: virtual用于声明一个可以被重写的成员。override用于重写父类中的成员。base关键字在子类中重写父类的虚拟成员时,通常会使用override修饰,并可以选择是否调用父类的实现。例如:
class Person{ public virtual void Print() { Console.WriteLine("编号:" + Id); Console.WriteLine("姓名:" + Name); // 其他输出 }}class Student : Person{ public override void Print() { base.Print(); // 调用父类的Print方法 Console.WriteLine("专业:" + Major); Console.WriteLine("年级:" + Grade); }} new关键字修饰成员,以隐藏父类中的同名成员。 class A{ public virtual void Print() { Console.WriteLine("A"); }}class B : A{ public new void Print() { Console.WriteLine("B"); }} override关键字修饰成员,以重写父类中的虚拟成员。 class C : A{ public override void Print() { Console.WriteLine("C"); }} class Student : Person{ public override void Print() { Console.WriteLine("专业:" + Major); Console.WriteLine("年级:" + Grade); }} class Teacher : Person{ public override void Print() { Console.WriteLine("职称:" + Title); Console.WriteLine("工资号:" + WageNo); }} class Program{ static void Main(string[] args) { A a1 = new B(); a1.Print(); // 输出"A" A a2 = new C(); a2.Print(); // 输出"C" }}class A{ public virtual void Print() { Console.WriteLine("A"); }}class B : A{ public new void Print() { Console.WriteLine("B"); }}class C : A{ public override void Print() { Console.WriteLine("C"); }} class Student{ public string Major { get; set; } public string Grade { get; set; } public override string ToString() { return Major + "," + Grade; }} 通过以上内容,可以清晰地理解C#虚拟关键字的使用方法及其在类继承中的应用。
转载地址:http://lxuk.baihongyu.com/