假设我有一个界面
public interface IHasInvertory
{
protected Invertory _invertory { get; set; }
public Invertory invertory
{
get => _invertory;
set {
if (_invertory != null)
_invertory.Owner = null;
_invertory = value;
_invertory.Owner = this;
}
}
}
它有一个字段_invertory
(永远不应该手动使用)和一个字段invertory
,这是您可以安全交互的字段。
问题是,当我尝试继承这个接口时,我无法直接访问该字段invertory
:
public class Player : Creature, IHasInvertory
{
Invertory IHasInvertory._invertory { get; set; }
protected override void Start()
{
((IHasInvertory)this).invertory.Items.Clear(); // Работает
this.invertory.Items.Clear(); // Ошибка???
base.Start();
Controller = new PlayerController();
}
}
为什么会发生这种情况,以及如何避免这种情况?
PS:Unity版本:(2022.3.7f1
最新2022年),版本C#
好像是9.0
PS 2:我检查过,即使在最新版本上也不起作用C#
......
protected
界面中字段的存在是无稽之谈!也就是说,来自“终于”这个词!就这样!!!接口应该只有
public
,这就是它存在的本质,作为任何人使用的指令,将实现方法隐藏在抽象之下!!!!如果这是注册一个模板,那么......它应该立即显得可疑和令人毛骨悚然!拐杖是不好的,但是拐杖,为了能够编写一个模板,实际上是有东西的。
接口中没有实现!其中写的逻辑,只是一个自动补全的模板,不是继承!!!
它应该是这样的:
如果你的库存需要一个字段
Owner
,那么很可能这是一个拐杖,你做错了什么。set
库存通常看起来是一种可疑的方法。为什么您可能需要转移库存?某种废话!我敢打赌,我会把我的帽子放在桌子上,应该转移的是内容,而不是设备!