【问题标题】:How can I make a private child function visible to the base class?如何使私有子函数对基类可见?
【发布时间】:2021-03-25 10:00:44
【问题描述】:

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

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();
}

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

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

例如

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

那么目标是特定类继承自通用类:

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


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

【问题讨论】:

    标签: c# abstract


    【解决方案1】:

    bar 定义为抽象:

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

    那么bar可以在每个子类中实现不同,但基类可以肯定存在:

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

    【讨论】:

    • 非常感谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢!并且还用于更正我发布的代码:-)
    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 2016-02-14
    • 2015-11-04
    • 1970-01-01
    • 2013-06-13
    • 2016-02-21
    • 2017-02-10
    • 2015-09-21
    相关资源
    最近更新 更多