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);
}
}
在孩子身上
public class CompanyStorageRepository : BaseStorageRepository<Company>
{
protected new string OneKey = "Company";
protected new string ListKey = "CompaniesList";
}
执行时
UpdateAllAsync
然后OneKey == null; 但为什么 ? 毕竟,我在派生类
中重新定义了属性答案 0 :(得分:7)
毕竟,我在派生类
中重新定义了属性
不,您隐藏派生类中的字段(不是属性)。实际上,派生类现在具有两个不同的 OneKey
字段。基类代码仍在查看基类中的字段,而不是派生类中的new
字段。
另请注意,字段无法虚拟或覆盖。您可以在派生类的构造函数中设置字段值,但是:
public class CompanyStorageRepository : BaseStorageRepository<Company>
{
public CompanyStorageRepository()
{
OneKey = "Company";
ListKey = "CompaniesList";
}
}
稍微好一点的设计是使用属性而不是字段。使用属性,您可以控制(和检测)何时更改值,并且可以在不破坏类半公共签名的情况下更改值的存储方式。