如何将方法参数指定为用户控件和接口
本文关键字:用户 控件 接口 方法 参数 | 更新日期: 2023-09-27 18:36:21
我有一个带有参数 p1 的构造函数,它具有以下规范:
- p1 必须从用户控件继承
- p1 必须实现界面我的界面
例:
public class ClassA: UserControl, MyInterface
{ ... }
任何人都知道我如何定义该方法。
构造函数如下所示:
public MyClass(UserControl uc) : base(uc)
{
// access to MyInterface-Methods
}
基类(来自第三方dll)需要一个UserControl,我需要访问MyInterface Methods。
提前感谢,瑞仕1980
在我的评论之后,我想到的只是一个
public void MyMethod<T>(T param) where T : UserControl, MyInterface
{
// do something here
}
[编辑] 好吧,在此期间没有人对它进行试探,所以我会尝试跟随。似乎您有一个从某种基类派生的类,该类采用UserControl
.您可以尝试以下方法:
public interface ITest
{
void AwesomeInterface();
}
//As far as I could tell, this class is in some 3rd party DLL
public class TheBaseClass
{
protected TheBaseClass(UserControl uc)
{
}
}
//Now this should work just fine
public class ClassB<T> : TheBaseClass where T : UserControl, ITest
{
public ClassB(T param) : base(param)
{
param.AwesomeInterface();
}
}
通过声明一个抽象基类来实现:
public abstract class BaseControl : UserControl, IMyInterface {}
并声明该类型的构造函数参数。 客户端代码现在必须派生自 BaseControl 并实现接口。
不太确定这在 WPF 设计器中是否有效,我知道它在 Winforms 设计器中不起作用,它需要能够构造基类的实例。 出于同样的原因,通用也不起作用。 在这种情况下,您必须求助于运行时检查:
public MyClass(UserControl uc) : base(uc)
{
if (uc as IMyInterface == null) {
throw new ArgumentException("You must implement IMyInterface", "uc");
}
// etc..
}