gpt4 book ai didi

c# - 由于接口(interface)方法仅是公共(public)的,如何强制执行私有(private)方法?

转载 作者:太空狗 更新时间:2023-10-29 22:09:52 26 4
gpt4 key购买 nike

接口(interface)可用于强制方法实现,但它们需要公开。

如果我想强制执行私有(private)方法怎么办?

更新:这不是关于阻止调用,而是关于确保私有(private)方法已被实现。

所以我不想使用接口(interface)本身。我想将某种编码风格强加给团队。

最佳答案

根据定义,接口(interface)始终是公共(public)的。强制实现 protected (对外私有(private)但派生类可访问)方法的唯一方法是子类化定义该方法的抽象类:

public abstract class A
{
protected abstract void Foo();
}

public class B : A
{
protected override void Foo() { }
}

如果您尝试更改 Foo,上面的内容将会中断在 B 中的访问修饰符,或者忘记为 Foo() 提供实现在 B .

编辑:

我相信使用 nested class 可以接近达到您想要的效果这只对外部类可见:这将允许使用外部类的私有(private)字段,同时强制实现接口(interface),而从技术上讲,该类在其他任何地方都不可见:

public interface IFooWorker
{
void DoWork();
int CalculateSomething();
}

public class Foo
{
private FooWorker _worker;
private int _currentValue;
private string _workStatement;


public Foo()
{
_worker = new FooWorker(this);
}

private class FooWorker : IFooWorker
{
private Foo _outer;
public FooWorker(Foo foo)
{
_outer = foo;
}

public void DoWork()
{
_outer._currentValue = CalculateSomething();
_outer._workStatement = "I did work";
}

public int CalculateSomething()
{
return 42;
}
}

}

关于c# - 由于接口(interface)方法仅是公共(public)的,如何强制执行私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com