我经常需要通过将实现委托给我的类的成员来实现接口。这个任务相当乏味,因为即使 Visual Studio 为接口方法生成存根,我仍然必须编写代码来委派实现。它不需要太多思考,所以它可能会被代码生成工具自动化......
我可能不是第一个想到这个的人,所以肯定已经有这样的工具了,但我在谷歌上找不到任何东西......有什么想法吗?
编辑: ReSharper似乎可以做到,但它相当昂贵......是否有具有相同功能的免费替代品?
我经常需要通过将实现委托给我的类的成员来实现接口。这个任务相当乏味,因为即使 Visual Studio 为接口方法生成存根,我仍然必须编写代码来委派实现。它不需要太多思考,所以它可能会被代码生成工具自动化......
我可能不是第一个想到这个的人,所以肯定已经有这样的工具了,但我在谷歌上找不到任何东西......有什么想法吗?
编辑: ReSharper似乎可以做到,但它相当昂贵......是否有具有相同功能的免费替代品?
我已经使用 Resharper 几个月了,它有一个很棒的功能可以做到这一点。
例如,编写以下代码:
class MyList<T> : IList<T>
{
private readonly IList<T> _list;
}
将插入符号放在 上_list
,按Alt+ Ins(生成代码的快捷方式),然后选择“委派成员”。选择您需要的成员,然后 R# 为他们生成委派成员:
public void Add(T item)
{
_list.Add(item);
}
public void Clear()
{
_list.Clear();
}
public bool Contains(T item)
{
return _list.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
_list.CopyTo(array, arrayIndex);
}
public bool Remove(T item)
{
return _list.Remove(item);
}
public int Count
{
get { return _list.Count; }
}
public bool IsReadOnly
{
get { return _list.IsReadOnly; }
}
public int IndexOf(T item)
{
return _list.IndexOf(item);
}
public void Insert(int index, T item)
{
_list.Insert(index, item);
}
public void RemoveAt(int index)
{
_list.RemoveAt(index);
}
public T this[int index]
{
get { return _list[index]; }
set { _list[index] = value; }
}
...见动态代理...
然而...
将接口实现委托给实例变量或类型 [如 typeof(type)] 的能力是 C# 和 VB.Net 非常需要的语言特性。由于没有多重继承以及密封和非虚拟方法和属性的流行,所需的绒毛代码量令人望而生畏。
我认为以下语言增强会起作用... //C#
interface IY_1
{
int Y1;
int Y2;
}
...
..
interface IY_n
{
....
..
}
class Y : IY_1, IY_2, ....,IY_n
{
private readonly Oy_1 Oy_1 = new Oy_1() supports IY_1, IY_2,...etc; // <<-----
private readonly Oy_2 Oy_2 = new Oy_2() supports IY_3, IY_8,...etc;
public int Y2 {...}
}
“supports”关键字(或等价物,如“defaults”)将标识一个有序的类字段值列表,使用名称和签名接口的正常名称和签名映射语义“帮助”实现一个或多个接口一致。任何本地实现都具有优先权,并且单个接口也可以由多个字段值实现。