为了账号安全,请及时绑定邮箱和手机立即绑定

强制实例实现一个方法

强制实例实现一个方法

C#
精慕HU 2021-11-07 19:43:28
可以强制派生类实现特定功能。现在,是否可以对类的每个实例分别执行相同的操作?(可能是在调用像 Java 即时覆盖这样的构造函数时)// on-the-fly override sample @JavaprogressBar.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {    }});ps:只有一个类我想为它创建一个实例。在这种情况下没有子类。
查看完整描述

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


查看完整回答
反对 回复 2021-11-07
?
慕姐8265434

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是我所知道的强制派生对象实现方法的唯一方法。


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信