如何覆盖属性
本文关键字:属性 覆盖 何覆盖 | 更新日期: 2023-09-27 17:56:33
in base LocalStorage
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
字段。 基类代码仍在查看基类中的字段,而不是派生类中的new
字段。
另请注意,字段不能是虚拟的或覆盖的。 不过,您可以在派生类的构造函数中设置字段值:
public class CompanyStorageRepository : BaseStorageRepository<Company>
{
public CompanyStorageRepository()
{
OneKey = "Company";
ListKey = "CompaniesList";
}
}
稍微好一点的设计是使用属性而不是字段。 使用属性,您可以控制(和检测)值何时更改,并且可以更改值的存储方式,而不会破坏类半公共签名。