我试图将所有参数更改为接口而不是类实例。 但是,当我尝试这个时,我遇到的问题是我需要在接口上添加很多set方法,我只想要get方法。原因是方法用于初始化并且在初始化期间只需要设置方法一次
示例:
protected IPcgMemory CurrentPcgMemory { get; private set; }
protected PatchesFileReader(IPcgMemory currentPcgMemory, byte[] content)
{
CurrentPcgMemory = currentPcgMemory;
CurrentPcgMemory.Content = content;
}
错误:IMemory.Content没有setter(在最后一行)
public interface IPcgMemory : IMemory, INavigable
...
public interface IMemory : ...
byte[] Content { get; }
我只想在IMemory for Content的界面中使用get方法,而不是set方法。 我应该删除接口并使用currentPcgMemory的实例,如:
protected PatchesFileReader(PcgMemory currentPcgMemory, byte[] content)
或者我应该在内容中使用该集:
public interface IMemory : ...
byte[] Content { get; set; }
或者有更好的解决方案吗?
答案 0 :(得分:2)
实现接口的实例的初始化是public" interface"的一部分。具有仅具有getter的属性的接口意味着设置永远不可能
。对于最常做的事情,没有界面的概念。
另一方面,如果您想要将引用传递给一个层,可以初始化实例,然后该层将引用传递给其他只能读取它的层,那么可以使用两个接口:
public interface IReadable {
int SomeProperty {get;}
}
public interface IInitializable : IReadable {
int SomeProperty {get;set;}
}
IReadable _passItOn;
public void InitializeAndUse(IInitializable initAndUse){
_passItOn = initAndUse;
initAndUse.SomeProperty = 42;
UseReadOnly(_passItOn);
}