在基础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);
}
}
Run Code Online (Sandbox Code Playgroud)
在孩子
public class CompanyStorageRepository : BaseStorageRepository<Company>
{
protected new string OneKey = "Company";
protected new string ListKey = "CompaniesList";
}
Run Code Online (Sandbox Code Playgroud)
执行时
UpdateAllAsync
Run Code Online (Sandbox Code Playgroud)
然后OneKey == null; 但为什么 ?毕竟,我在派生类中重新定义了属性
毕竟,我在派生类中重新定义了属性
不,你隐藏了派生类中的字段(不是属性).有效地,派生类现在有两个不同的 OneKey字段.基类代码仍在查看基类中的字段,而不是new派生类中的字段.
另请注意,字段不能虚拟或覆盖.您可以在派生类的构造函数中设置字段值,但是:
public class CompanyStorageRepository : BaseStorageRepository<Company>
{
public CompanyStorageRepository()
{
OneKey = "Company";
ListKey = "CompaniesList";
}
}
Run Code Online (Sandbox Code Playgroud)
稍微好一点的设计是使用属性而不是字段.使用属性,您可以控制(和检测)何时更改值,并且可以在不破坏类半公共签名的情况下更改值的存储方式.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |