我正在学习C#,现在我遇到了问题。 :-) 在C ++中,我喜欢使用“const reference”作为参数来避免这种情况 被调用的方法改变了我传递的对象。
我在某处读到了我能做的事情。使用Interfaces在C#中类似。 在界面中,我只是放了一些“getters”来允许该方法只读访问 我的目标。
现在猜测,我想把我的C#方法传递给像“List”这样的内置容器。 但我想避免该方法改变该列表中的内容。 只读!
我的第一个想法是: - 我创建了一个名为IMyOwnInterface的新接口,它使用了IList接口
我的新界面IMyOwnInterface只包含“getters”
我将方法改为某事。喜欢MyLittleMethod(IMyOwnInterface if)
现在方法“MyLittleMethod”可以看到“getters”,我把它放在我自己的界面而不是IList的“setters”
这可能吗? 有人可以给我一个暗示吗?
答案 0 :(得分:3)
您想使用List.AsReadOnly。
http://msdn.microsoft.com/en-us/library/e78dcd75(VS.80).aspx
答案 1 :(得分:1)
是的,我相信这会奏效。试一试,让我们知道它是如何工作的:D
答案 2 :(得分:0)
答案是否定的:
IList没有实现IMyOwnInterface,因此你无法强制转换它。
IList list = ...
MyLittleMethod((IMyOwnInterface)list) // Compiler errror here
在这种情况下,您可以使用ReadOnlycollection:
IList list = ...
MyLittleMethod(new ReadOnlyCollection(list))
答案 3 :(得分:0)
使用接口,它基本上只能通过继承或一些代理东西(使用适配器类显式,通过RealProxy实现,或使用库来执行类似的操作,例如LinFu)。
但是,开箱即用,您可以使用委托对具有匹配签名的单个方法进行后期绑定。