IT박스

제네릭 메서드로 인터페이스 구현

itboxs 2021. 1. 7. 07:46
반응형

제네릭 메서드로 인터페이스 구현


나는 이것에 공백을 그리는 중이며 내가 작성한 이전 예제를 찾을 수없는 것 같습니다. 클래스와 함께 일반 인터페이스를 구현하려고합니다. 인터페이스를 구현할 때 Visual Studio가 Generic Interface의 모든 메서드를 구현하지 않는다는 오류를 지속적으로 생성하기 때문에 무언가 제대로 작동하지 않는다고 생각합니다.

다음은 내가 작업중인 작업의 스텁입니다.

public interface IOurTemplate<T, U>
{
    IEnumerable<T> List<T>() where T : class;
    T Get<T, U>(U id)
        where T : class
        where U : class;
}

그래서 내 수업은 어떻게 생겼을까 요?


다음과 같이 인터페이스를 다시 작업해야합니다.

public interface IOurTemplate<T, U>
        where T : class
        where U : class
{
    IEnumerable<T> List();
    T Get(U id);
}

그런 다음이를 일반 클래스로 구현할 수 있습니다.

public class OurClass<T,U> : IOurTemplate<T,U>
        where T : class
        where U : class
{
    IEnumerable<T> List()
    {
        yield return default(T); // put implementation here
    }

    T Get(U id)
    {

        return default(T); // put implementation here
    }
}

또는 구체적으로 구현할 수 있습니다.

public class OurClass : IOurTemplate<string,MyClass>
{
    IEnumerable<string> List()
    {
        yield return "Some String"; // put implementation here
    }

    string Get(MyClass id)
    {

        return id.Name; // put implementation here
    }
}

다음과 같이 인터페이스를 재정의하고 싶을 것입니다.

public interface IOurTemplate<T, U>
    where T : class
    where U : class
{
    IEnumerable<T> List();
    T Get(U id);
}

I think you want the methods to use (re-use) the generic parameters of the generic interface in which they're declared; and that you probably don't want to make them generic methods with their own (distinct from the interface's) generic parameters.

Given the interface as I redefined it, you can define a class like this:

class Foo : IOurTemplate<Bar, Baz>
{
    public IEnumerable<Bar> List() { ... etc... }
    public Bar Get(Baz id) { ... etc... }
}

Or define a generic class like this:

class Foo<T, U> : IOurTemplate<T, U>
    where T : class
    where U : class
{
    public IEnumerable<T> List() { ... etc... }
    public T Get(U id) { ... etc... }
}

-- Edit

The other answers are better, but note you can have VS implement the interface for you, if you are confused as to how it should look.

Process described below.

Well, Visual Studio tells me it should look like this:

class X : IOurTemplate<string, string>
{
    #region IOurTemplate<string,string> Members

    IEnumerable<T> IOurTemplate<string, string>.List<T>()
    {
        throw new NotImplementedException();
    }

    T IOurTemplate<string, string>.Get<T, U>(U id)
    {
        throw new NotImplementedException();
    }

    #endregion
}

Note that all I did was write interface, then click on it, and wait for the little icon to popup to have VS generate the implementation for me :)

ReferenceURL : https://stackoverflow.com/questions/1344694/implement-an-interface-with-generic-methods

반응형