2009-08-14 4 views
2

종종 구현을 클래스의 멤버에게 위임하여 인터페이스를 구현해야합니다. Visual Studio에서 인터페이스 메서드에 대한 스텁을 생성하더라도 구현을 위임 할 코드를 작성해야하기 때문에이 작업은 매우 지루합니다. 많은 생각을 필요로하지 않으므로 코드 생성 도구로 자동화 할 수 있습니다. ...위임을 통한 인터페이스 구현을 생성하는 도구는 무엇입니까?

저는 처음에는 그런 생각을하지 않았으므로 이미 그런 도구가 있어야합니다. Google에서 아무 것도 찾을 수 없었습니다 ... 어떤 생각입니까?


편집 : 같은 기능을 무료로 대안이 ... 그것은 ReSharper can do it 것 같다,하지만 꽤 비싸?

+0

아그 추출 데코레이터. 나는 나이를위한 Coderush에서 이것을 할 의미였습니다 - 시간을 찾지 못했습니다. 나는 이것에 대한 해답에 흥미가있을 것이다. –

답변

2

저는 몇 달 동안 Resharper를 사용 해왔고, 이것을 수행하는 데 훌륭한 기능이 있습니다.

는 예를 들어, 다음 코드 쓰기 :

class MyList<T> : IList<T> 
{ 
    private readonly IList<T> _list; 
} 

장소 _list에 캐럿을 눌러 Alt 키 + (코드 생성을위한 바로 가기), 및 "위임 멤버"를 선택합니다. 필요한 멤버를 선택하면 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; } 
    } 
0

을 ... 동적 프록시를 참조하십시오 ... 그러나

... 같이 [인스턴스 변수로 인터페이스 구현을 위임하거나 입력 할 수

수있는 능력을 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 {...} 
} 

은 "지원"키워드는 클래스 필드 값의 정렬 된 목록을 식별 할 다음 언어 개선 작업 거라 봅니다 하나 이상의 인터페이스의 구현을 돕고, 이름과 서명 대응 인터페이스의 일반적인 이름과 서명 매핑 의미를 사용한다. 모든 로컬 구현은 우선 순위를 가지며 단일 인터페이스가 여러 필드 값으로 구현 될 수 있습니다.

+0

에 대해 BCL 유형을 수행해야합니다. 흥미로운 기능 일 것이라고 나는 동의하지만 MS가이를 유용하게 사용할 수 있다고 생각하는지 확신하지 못합니다. 언어 –

관련 문제