C# 父类调用子类,子类调用父类
时间: 2024-12-21 13:28:47 浏览: 7
在C#中,子类调用父类的方法和父类调用子类的方法涉及的概念有所不同,因为默认情况下,子类只能访问其公开的(非私有的)父类成员。但通过以下方式可以实现:
1. **方法重写**(Overriding)[^1]:
子类可以直接覆盖父类的公共或保护方法,这样在子类实例上调用该方法时会执行子类的版本。例如:
```csharp
class ParentClass {
public virtual void ParentMethod() {
Console.WriteLine("Parent method");
}
}
class ChildClass : ParentClass {
public override void ParentMethod() {
Console.WriteLine("Child method");
}
}
// 父类实例调用子类方法
var childInstance = new ChildClass();
childInstance.ParentMethod(); // 输出 "Child method"
```
2. **虚方法**(Virtual Methods) 和 **接口** (Interfaces):
如果父类方法是虚方法,那么在子类中重新实现时,即使不显式指定override,也可以让父类实例调用子类的实现。如果子类实现了接口,接口方法也是虚的。
3. **Base关键字**:
在子类方法中,你可以使用`base.MethodName()`来直接调用父类的方法,即使它不是虚方法。例如:
```csharp
class ParentClass {
public void NonVirtualMethod() {
Console.WriteLine("Non-virtual method in parent");
}
}
class ChildClass : ParentClass {
public void SomeMethod() {
base.NonVirtualMethod(); // 直接调用父类的非虚方法
Console.WriteLine("Child's additional logic");
}
}
```
请注意,在实际项目中,这些策略应基于设计需求和代码组织考虑。
阅读全文