强制实例实现方法

时间:2018-07-31 06:11:56

标签: c# instance

可以强制派生类来实现特定功能。

现在,是否可以分别为该类的每个实例执行相同的操作? (可能是在调用Java之类的构造函数时进行覆盖)

// on-the-fly override sample @Java
progressBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

p.s:我只想为其创建一个类。在这种情况下,没有子类。

2 个答案:

答案 0 :(得分:1)

实例不能实现接口,只有类可以。同样在Java中这是不可能的。而是在后面的基类中创建了一个匿名类,该类显示为基类的实例。

要在C#中实现类似的目的,您可以使用委托并将其提供给您的类的cosntructor:

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 */ }

答案 1 :(得分:0)

Interfaces可用于要求所有派生对象实现其方法(see this)。从听起来来看,base.Method()正是您想要的(see this):

internal class A {
    public virtual void DoSomething() { }
}
internal class B : A {
    public override void DoSomething() { base.DoSomething(); }
}

以上内容对于确保在调用A.DoSomething时执行B.DoSomething中的代码很有用。

我知道唯一使用interface强制派生对象实现方法的方法。