C# 确保接口实现继承自特定基 class

C# Make sure that interface implementation inherits from a particular base class

我有接口

public interface IInputReciever {
    void OnRecieveInput(InputInfo Info);
}

和接口扩展 class

public static class IInputRecieverExtensions {
    public static void SubscribeToInput(this IInputReciever Reciever) { 
       //Use member of X
    }
    public static void UnsubscribeFromInput(this IInputReciever Reciever) {
       //Use member of X
    }
}

假设我有两个 classes A 和 B;然而,虽然只有 B 继承自 X,但两者都实现了我的接口。

public class B : X, IInputReciever {
   //Contains members of B and X
}

public class A : IInputReciever {
   //Contains members of A only
}

在我的接口扩展中,我想使用 X 的成员,但不会编译,因为不知道实现者是 X 的子class,也不能保证是一个.

我能否以某种方式强制我的实现者从 X 派生以使这种情况起作用 - 或者是否有更好的方法来解决这个问题?

使用接口的意义在于表明您不关心实现细节,即class实现了接口什么。如果你必须强制派生的 classes 使用特定的实现,那么让 X 成为一个抽象基础 class,不要提供接口,并让你的扩展方法引用 X 而不是接口。

您可以使用通用方法。因此,您可以使用 where.

public static void SubscribeToInput<TInputReciever>(this TInputReciever Reciever) where TInputReciever : IInputReciever, X
{ 
   //Use member of X
}

由于通用类型参数的限制,这将强制接收器实现 IInputReceiverX

我认为您可以使用带有约束的通用扩展方法:

public static class IInputRecieverExtensions{
    public static void SubscribeToInput<T>(this T Reciever) where T : X, IInputReceiver { 
        //Use member of X
    }
    public static void UnsubscribeFromInput<T>(this T Reciever) where T : X, IInputReceiver {
        //Use member of X
    }
}