C#中的虚拟/抽象字段

use*_*041 32 .net c# oop abstract-class

是否可以在C#类中拥有虚拟/抽象字段?如果是这样,它是如何完成的?

Jus*_*ner 52

虚拟/抽象领域?不,字段就在那里保存数据.没有什么可以实现的.

您可以定义虚拟/抽象属性.


qJa*_*ake 8

MSDN文档的第一句话回答了您的问题:

virtual关键字用于修改方法,属性,索引器或事件声明,并允许在派生类中重写它.

http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.80).aspx


Geo*_*uer 7

不,只能分配一个字段,不能覆盖.

但是,您可能使用属性,它看起来几乎相同

public class MyClass {
  public int MyField; //field
  public virtual int MyProperty { get; set; }  //property
}
Run Code Online (Sandbox Code Playgroud)

两者都这样使用:

var x = new MyClass();
Debug.WriteLine("Field is {0}", x.MyField);
Debug.WriteLine("Property is {0}", x.MyProperty);
Run Code Online (Sandbox Code Playgroud)

除非消费者使用反射,否则它看起来完全一样.


Bli*_*ndy 6

但是,您可以拥有虚拟或抽象属性:

public abstract string ModelName { get; set; }
Run Code Online (Sandbox Code Playgroud)