问题 是否有工具通过包装成员字段或属性来实现接口?


我发现自己经常做以下事情,我觉得必须有一个自动解决方案:

我有一个包装类,比如ListWrapper,它包装了一个IList:

public class ListWrapper : IList 
{
    private IList _list;

    // ... Implement IList by redirecting every call to _list
}

有没有可以自动生成此实现的工具?


925
2018-04-10 19:43


起源

你的意思是:为你生成这7个单词? - Francis P
我想可以使用T4模板快速完成。像CSLA这样的框架也具有这样的功能,尽管它们可能对您的需求有些过分。 - David
@David我认为T4是最好的方式 - MilkyWayJoe
此外,对于这个特定的代码,我会做类似的事情 public class Wrapper { /*some code*/ } 接着 public class ListWrapper : List<Wrapper> { } 除非我需要自定义实现 - MilkyWayJoe
@MilkyWayJoe:不确定我理解。主要的用例是使用一个类并使用一些自定义逻辑包装它。在我的例子中,我正在包装一个IList,没有包装器列表。 - afeygin


答案:


使用ReSharper,在类中命中“alt-insert”,然后选择“委派成员”。


15
2018-04-10 19:54



@afeygin与答案中的编程有什么关系?使用工具菜单? - L.B
@ L.B:Stack Overflow适用于专业和发烧友程序员,因为他们喜欢编写代码的人。我们认为最好的Stack Overflow问题中有一些源代码,但如果您的问题通常涵盖...特定的编程问题,那么软件算法 程序员常用的软件工具 编程专业所特有的实用,可回答的问题...那么你就是在正确的地方提出你的问题! - afeygin
@ L.B只是想提醒你SO指南 - afeygin
这很棒。有没有办法同时指定显式接口实现以避免多个接口冲突? - David Cuccia
@DavidCuccia不是我所知道的。您可以让ReSharper显式实现缺少的成员或委派成员,但它看起来不够聪明,可以同时执行这两个操作。 - David Peden


任何模拟框架,其中大多数使用Castle Dynamic Proxy IIRC。

看看Moq吧

实际上,这是一个类似问题的答案:

自动创建派生类型


1
2018-04-10 19:49



我不想模拟或拥有动态代理甚至引入任何库。这是一个非常简单的代码生成问题。 - afeygin