如何使私有子函数对基 class 可见?

How can I make a private child function visible to the base class?

假设我有以下class具有通用接口的:

public class MyClass_1 : IGenericInterface
{
    public void foo()
    {
        bar();
    }
    
    void bar()
    {
        ...
    }
}


public class MyClass_2 : IGenericInterface
{
    public void foo()
    {
        bar();
    }
    
    void bar()
    {
        ...
    }
}



public interface IGenericInterface
{
    void foo();
}

它们都有 public "foo" 函数,而且它的实现也是一样的。所以我倾向于将“foo”移动到抽象中,不是吗?

现在,问题是,他们调用了一个私有函数(“bar”),这是一个 class 特定的实现。我怎样才能使这个函数“bar”对“foo”的可能通用实现可见?

例如

public abstract class MyGenericClass: IGenericInterface
{
    public foo()
    {
        bar();
    }
}

那么目标就是特定的 class 继承自通用的 class:

public class MyClass_1 : GenericClass
{
    private void bar()
    {
        ...
    }
}


public class MyClass_2 : GenericClass
{       
    private void bar
    {
        ...
    }
}

在你的基础中让它成为一个抽象的保护方法class:

public abstract class MyGenericClass: IGenericInterface
{
    public foo()
    {
        bar();
    }

    protected abstract void bar();
}

Protected 意味着它将在所有派生的 classes 中可见,abstract 意味着你派生的 classes 必须实现它(如果它们本身不是抽象的)。

bar定义为摘要:

public abstract class MyGenericClass: IGenericInterface
{
    protected abstract void bar();
    
    public foo()
    {
        bar();
    }
}

那么bar可以在每个subclass中实现不同,但是baseclass可以确定存在:

public class MyClass_1 : GenericClass
{
    protected override void bar
    {
        // ...
    }
}