仅用于初始化的set方法接口?

时间:2014-12-18 02:14:18

标签: c# methods interface

我试图将所有参数更改为接口而不是类实例。 但是,当我尝试这个时,我遇到的问题是我需要在接口上添加很多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; }

或者有更好的解决方案吗?

1 个答案:

答案 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);
}