c# - 强制实例实现方法
问题描述
可以强制派生类实现特定功能。
现在,是否可以分别对类的每个实例执行相同的操作?(可能在调用诸如 Java on-the-fly override 之类的构造函数时)
// on-the-fly override sample @Java
progressBar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
ps:只有一个类我想为它创建一个实例。在这种情况下没有子类。
解决方案
实例不能实现接口,只有类可以。在 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 */ }
推荐阅读
- javascript - 从客户端 javascript 使用 Git
- sql-server - 将最近的 SQL Server 备份文件从一台计算机移动到另一台计算机
- google-apps-script - 从脚本编辑器调用 Google Editor Addon 的功能
- python - 如何获取当前上下文(登录实体)objectId
- python-3.x - 在 Mac OS X 上从 PYTHONPATH 清除项目路径
- android-studio - Android Studio 构建签名应用程序清单错误
- algorithm - 面试问题:插入开关以最大限度地延长灯泡的使用时间
- c++ - 为什么静态类成员没有内存泄漏错误?
- c - 无法在 Yocto Linux 操作系统上编译使用 json-c 库函数的代码
- gradle - 使用 gradle play 发布者上传发行说明