如何在接口中使用泛型委托

本文关键字:泛型 接口 | 更新日期: 2023-09-27 18:10:03

我正在尝试创建一个持有通用委托的接口。然后,我希望实现接口的类决定实际的类型方法,或者最好甚至返回另一个委托。

下面的代码描述了我想要实现的目标。

public delegate void GenericMethod<T>(T arg);
public delegate void StringMethod(string str);
public delegate void ByteMethod(byte bt);
public interface ITest
{
    GenericMethod<T> someMethod;    
}
public class TestA : ITest
{
    public GenericMethod<string> someMethod
    {
         get 
         {
               return stringMethod; //which is of type StringMethod(string str), defined above
         }
    }
}
public class TestB : ITest
{
    public GenericMethod<byte> someMethod
    {
         get 
         {
               return byteMethod; //which is of type ByteMethod(byte bt);, defined above
         }
    }
}

这可能吗?或者以这种方式更换代表是不可能的?

如何在接口中使用泛型委托

我认为如果不使接口泛型,这是不可能的。常见的实现是:

public interface ITest<T>
{
    GenericMethod<T> someMethod;
}

或者,如果你想要一个非泛型接口,使用:

public interface ITest
{
    GenericMethod<object> someMethod;
}

您还可以查看两个接口IEnumerableIEnumerable<T>,以了解如何组合泛型和非泛型接口。只需显式实现非泛型接口,以便在不关心具体类型时使用。

由于继承原则,您不能这样做。所有在ITest中工作的东西都应该在派生类/接口中工作。这意味着,如果我可以使用

GenericMethod<int> someMethod

(看int)在测试中,我应该能够在TestA和TestB中使用它。您正在尝试忽略此限制

public delegate void GenericMethod<T>(T arg);
public delegate void StringMethod(string str);
public delegate void ByteMethod(byte bt);
public interface ITest<T>
{
    GenericMethod<T> someMethod { get; };
}
public class TestA : ITest<string>
{
    public GenericMethod<string> someMethod
    {
        get
        {
            return stringMethod; //which is of type StringMethod(string str), defined above
        }
    }
}
public class TestB : ITest<byte>
{
    public GenericMethod<byte> someMethod
    {
        get
        {
            return byteMethod; //which is of type ByteMethod(byte bt);, defined above
        }
    }
}