首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制实例实现方法

强制实例实现方法
EN

Stack Overflow用户
提问于 2018-07-31 06:11:55
回答 2查看 196关注 0票数 1

可以强制使用派生类来实现特定的函数。

现在,是否可以对类的每个实例分别执行相同的操作?(可能是在调用构造函数(比如动态重写Java )时)

代码语言:javascript
复制
// on-the-fly override sample @Java
progressBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 06:33:54

实例不能实现接口,只有类可以实现。在Java中,这也是不可能的。相反,在后面创建一个匿名类,该类派生于基类,该类作为基类的一个实例出现。

为了在C#中实现类似的功能,您可以使用一个委托并在您的类的宇航员中提供它:

代码语言:javascript
复制
class MyClass
{
    Action<T> TheAction { get; private set; }
    public MyClass(Action<T> doSomething() { this.TheAction = doSomething; }
}

现在您可以为每个实例提供不同的行为。

代码语言:javascript
复制
var i1 = new MyClass(x => Console.WriteLine(x));
var i2 = new MyClass(x => DoSomething(x));

不过,我不明白你为什么需要这个。要启用进度栏的单击事件,只需执行以下操作:

代码语言:javascript
复制
myProgressBar.Click += (sender, args) => { /* what ever */ };

或者:

代码语言:javascript
复制
myProgressBar.Click += MyMethod;

使用

代码语言:javascript
复制
MyMethod(object sender, EventArgs args) { /* what ever */ }
票数 2
EN

Stack Overflow用户

发布于 2018-07-31 06:24:52

Interfaces可用于要求所有派生对象实现其方法(看看这个)。不过,从这方面的声音来看,base.Method()是您要寻找的更多内容(看看这个):

代码语言:javascript
复制
internal class A {
    public virtual void DoSomething() { }
}
internal class B : A {
    public override void DoSomething() { base.DoSomething(); }
}

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51606489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档