一种方法多个接口返回类型

时间:2011-12-01 20:31:55

标签: c#

假设我有

public class ClassA : Ione, Itwo
public class ClassB : Ione, Itwo
public class ClassC : Ione, Itwo

和方法MethodA,它返回ClassA,ClassB或ClassC的实例。 MethodA返回类型可以是Ione或Itwo。

我怎样才能实现这一目标?。

我尝试过使用这样的泛型:

public T MethodA<T>(myEnum e) where T : Ione, Itwo

但是在输入return (T)new ClassA();时,我收到错误“无法将类型ClassA转换为T”。

感谢。

3 个答案:

答案 0 :(得分:5)

统一两个接口:

interface ITogether : Ione, Itwo { }

并将其用作返回类型。

你可能需要你的课程来实现ITogether而不是Ione和Itwo,但是你应该尝试两种方式。

答案 1 :(得分:3)

您可以定义一个继承自IThreeIone的新接口Itwo,然后在您的具体类中实现该接口:

public interface IThree : Ione, Itwo { }

然后将其用作返回类型:

public IThree MethodA<T>(myEnum e) where T : IThree
{
    return new ClassA();
}

要使此方法通用,您可以添加new()约束并返回所需的类型

public static T MethodOfType<T>() where T : IThree, new()
{
    return new T();
}

答案 2 :(得分:0)

首先将ClassA作为对象

    public T MethodA<T>() where T : Ione, Itwo
    {
        return (T)(object)new ClassA();
    }

应该可以工作,但可以抛出运行时异常。您可能想要的是

    public T MethodA<T>() where T : Ione, Itwo
    {
        return (T)(object)Activator.CreateInstance(typeof(T));
    }

另请注意,如果T没有空构造函数,这仍会导致异常。你可以通过添加更新声明来添加编译时检查T:Ione,Itwo,new()