我有一个名为Common
的项目以及其他几个项目。在Common
项目中,我有一个名为ItemBase
的类。在该课程中,我有一个名为CachedReference
的虚拟getter,它看起来像这样:
public virtual ItemData CachedReference
{
get
{
return new ItemData();
}
}
现在,我正在返回一个空的ItemData
对象,因为我希望从ItemBase
继承的类覆盖此getter,因此它将引用覆盖getter 而不是默认的(我会把它变成一个抽象类,但我不能,因为Common
项目初始化了这个类的实例)。
在我的其他项目中,我有一个名为Item
的类,它继承自ItemBase
类并覆盖getter。它看起来像这样:
public override ItemData CachedReference
{
get
{
return LoginServer.Instance.ItemDataProvider[this.MapleId];
}
}
ItemBase
类的构造函数使用CachedReference
属性来设置它的数据。但是,当我初始化使用Item
的默认构造函数的ItemBase
类的新实例时,它指的是默认 getter而不是 overriden 一。
为什么会发生这种情况?我只想引用覆盖的getter,而不是默认的getter,因此每个项目都可以返回它自己的CachedReference
。
编辑:我被要求展示我如何使用CachedReference
,所以在这里:
public ItemBase(int mapleId, short quantity = 1)
{
this.MapleId = mapleId;
this.Quantity = quantity;
this.WeaponAttack = this.CachedReference.WeaponAttack;
...
}
答案 0 :(得分:0)
此代码按预期工作。你能提供一份可证明你的问题的可编码代码吗?
public static void Main()
{
var derived = new Derived();
}
public class Base
{
protected string _p = "Base";
public virtual string P
{
get { Console.WriteLine("Base get"); return _p; }
set { Console.WriteLine("Base set"); _p = value; }
}
public Base()
{
P = "Base constructor";
}
}
public class Derived : Base
{
public override string P
{
get { Console.WriteLine("Derived get"); return _p; }
set { Console.WriteLine("Derived set"); _p = value; }
}
public Derived()
{
Console.WriteLine(P);
}
}
输出:
Derived set
Derived get
Base constructor