C# 如何覆盖该属性

C# 如何覆盖该属性,c#,xamarin,C#,Xamarin,在基本本地存储中 public class BaseStorageRepository<T> { protected string OneKey = null; protected string ListKey = null; public async Task UpdateAllAsync(List<T> data) { await BlobCache.LocalMachine.InsertObject(ListKe

在基本本地存储中

 public class BaseStorageRepository<T> 
{
    protected string OneKey = null;
    protected string ListKey = null;

    public async Task UpdateAllAsync(List<T> data)
    {
        await BlobCache.LocalMachine.InsertObject(ListKey, data);
    }
}
然后OneKey==null; 但是为什么呢? 毕竟,我在派生类中重新定义了属性

毕竟,我在派生类中重新定义了属性

否,您在派生类中隐藏了字段(而不是属性)。实际上,派生类现在有两个不同的
OneKey
字段。基类代码仍在查看基类中的字段,而不是派生类中的
new
字段

还请注意,字段不能是虚拟的或重写的。您可以在派生类的构造函数中设置字段值,但是:

public class CompanyStorageRepository : BaseStorageRepository<Company>
{
    public CompanyStorageRepository()
    {
        OneKey = "Company";
        ListKey = "CompaniesList";
    }
}
公共类公司存储库存储库:BaseStorageRepository
{
上市公司储蓄存款()
{
OneKey=“公司”;
ListKey=“公司列表”;
}
}

稍微好一点的设计是使用属性而不是字段。使用属性,您可以控制(和检测)值何时更改,并且可以更改值的存储方式,而不会破坏类半公开签名

请将代码张贴在调用函数的位置以及如何使用它
new
隐藏实现。你没有得到任何东西。A)你没有写属性;它们是田野。B) 要重写属性(或方法),它必须是
virtual
。你没有覆盖它;你“隐藏”或“隐藏”了它。
UpdateAllAsync
public class CompanyStorageRepository : BaseStorageRepository<Company>
{
    public CompanyStorageRepository()
    {
        OneKey = "Company";
        ListKey = "CompaniesList";
    }
}