C# - 是否可以使用新接口扩展现有的内置类

时间:2009-11-25 18:21:24

标签: c# interface reference const

我正在学习C#,现在我遇到了问题。 :-) 在C ++中,我喜欢使用“const reference”作为参数来避免这种情况 被调用的方法改变了我传递的对象。

我在某处读到了我能做的事情。使用Interfaces在C#中类似。 在界面中,我只是放了一些“getters”来允许该方法只读访问 我的目标。

现在猜测,我想把我的C#方法传递给像“List”这样的内置容器。 但我想避免该方法改变该列表中的内容。 只读!

我的第一个想法是: - 我创建了一个名为IMyOwnInterface的新接口,它使用了IList接口

  • 我的新界面IMyOwnInterface只包含“getters”

  • 我将方法改为某事。喜欢MyLittleMethod(IMyOwnInterface if)

  • 现在方法“MyLittleMethod”可以看到“getters”,我把它放在我自己的界面而不是IList的“setters”

这可能吗? 有人可以给我一个暗示吗?

4 个答案:

答案 0 :(得分:3)

答案 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)。

但是,开箱即用,您可以使用委托对具有匹配签名的单个方法进行后期绑定。