C# C语言中的虚拟/抽象字段#

C# C语言中的虚拟/抽象字段#,c#,.net,oop,abstract-class,C#,.net,Oop,Abstract Class,在C#类中是否可能有虚拟/抽象字段?如果是,如何完成?否,只能将字段分配给not,覆盖 但是,您可能会使用一个属性,它看起来几乎相同 public class MyClass { public int MyField; //field public virtual int MyProperty { get; set; } //property } 两者都是这样使用的: var x = new MyClass(); Debug.WriteLine("Field is {0}", x.M

在C#类中是否可能有虚拟/抽象字段?如果是,如何完成?

否,只能将字段分配给not,覆盖

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

public class MyClass {
  public int MyField; //field
  public virtual int MyProperty { get; set; }  //property
}
两者都是这样使用的:

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

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

虚拟/抽象字段?不是。字段只是用来保存数据的。没有什么可实施的


但是您可以。

否。字段不能是虚拟的\抽象的,但属性可以。

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

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


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

public abstract string ModelName { get; set; }

字段是类中的存储位置-您不能“覆盖”它们或使其成为虚拟存储。


另一方面,属性可以是虚拟的或抽象的。属性只是get/set方法的语法糖,它执行检索或设置属性值的工作。

属性可以是虚拟的,也许你可以从中获益。至少它在NHibernate中被大量使用


基本上,你必须有一个虚拟化的方法,虚拟场应该如何工作?

不。你必须使用一个属性来完成你似乎要做的事情。

一个老问题,但这是我的2美分:

尽管可能无法创建虚拟字段,但可以实现OP似乎想要的,即派生类的字段值与基字段值不同

只需在构造函数中为其指定“派生”值。


(尽管如果有像
inti=1;intj=i;
这样的字段初始值设定项,这还不够。)

不,字段只是数据,不包含任何逻辑。没有可重写的内容,因此使用虚拟字段没有意义。有没有办法在基类中声明静态字段,但不提供值,而是让所有子类提供实际值?Imo字段是一个实现细节,所以这应该是不可能的。如果您希望创建类似于子代提供的静态“描述”属性的内容,我建议您研究属性,它允许您将自定义元数据与类型关联。这似乎满足了我的需要。非常感谢。