2 回答
TA贡献1833条经验 获得超4个赞
实例不能实现接口,只有类可以。同样在Java中这是不可能的。取而代之的是,在后面创建了一个从您的基类派生的匿名类,它显示为您的基类的实例。
要在 C# 中实现类似的功能,您可以使用委托并在类的构造函数中提供它:
class MyClass
{
Action<T> TheAction { get; private set; }
public MyClass(Action<T> doSomething() { this.TheAction = doSomething; }
}
现在您可以为每个实例提供不同的行为:
var i1 = new MyClass(x => Console.WriteLine(x));
var i2 = new MyClass(x => DoSomething(x));
但是我不明白为什么你甚至需要这个。要为进度条启用点击事件,只需执行以下操作:
myProgressBar.Click += (sender, args) => { /* what ever */ };
或者:
myProgressBar.Click += MyMethod;
和
MyMethod(object sender, EventArgs args) { /* what ever */ }
TA贡献1813条经验 获得超2个赞
Interfaces可用于要求所有派生对象实现其方法(请参阅this)。不过,从这个声音来看,base.Method()更多的是你正在寻找的东西(见这个):
internal class A {
public virtual void DoSomething() { }
}
internal class B : A {
public override void DoSomething() { base.DoSomething(); }
}
以上对于确保在调用A.DoSomething时执行其中的代码很有用B.DoSomething。
使用 aninterface是我所知道的强制派生对象实现方法的唯一方法。
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报