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";
}
}