C# - 使用覆盖的getter

时间:2015-03-06 11:45:23

标签: c# getter

我有一个名为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;
    ...
}

1 个答案:

答案 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