首页 > 解决方案 > 强制实例实现方法

问题描述

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

现在,是否可以分别对类的每个实例执行相同的操作?(可能在调用诸如 Java on-the-fly override 之类的构造函数时)

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

    }
});

ps:只有一个类我想为它创建一个实例。在这种情况下没有子类。

标签: c#instance

解决方案


实例不能实现接口,只有类可以。在 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 */ }

推荐阅读