0

我有一个带有参数 p1 的构造函数,它具有以下规范:

  • p1 必须继承自 UserControl
  • p1 必须实现接口 MyInterface

例子:

public class ClassA: UserControl, MyInterface
{ ... }

任何人都知道我如何定义该方法。

构造函数如下所示:

public MyClass(UserControl uc) : base(uc)
{ 
   // access to MyInterface-Methods
}

基类(来自第三方 dll)需要一个 UserControl,我需要访问 MyInterface 方法。

提前致谢, rhe1980

4

2 回答 2

2

发表评论后,我想到的只是一个

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();
    }
}
于 2012-06-04T11:35:20.980 回答
0

你可以通过声明一个抽象基类来做到这一点:

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..
}
于 2012-06-04T12:35:46.683 回答