如何使私有子函数对基 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
{
// ...
}
}
假设我有以下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
{
// ...
}
}