c#中的父类和子类
以下是关于 C# 中父类与子类的核心概念及实践要点总结,结合最新技术实践:
------
1. 继承基础
• 定义:子类(派生类)继承父类(基类)的成员(属性、方法等),但不能继承私有成员(private)和构造函数。
【csharp】
public class Parent {
protected string Name { get; set; } // 子类可访问
private int Age { get; set; } // 子类不可访问<x-preset class="no-tts reference-tag disable-to-doc" data-index="1">1</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="4">4</x-preset>
}
public class Child : Parent {
public void PrintName() => Console.WriteLine(Name); // 允许访问父类 protected 成员
}
public class Parent { protected string Name { get; set; } // 子类可访问 private int Age { get; set; } // 子类不可访问<x-preset class="no-tts reference-tag disable-to-doc" data-index="1">1</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="4">4</x-preset> } public class Child : Parent { public void PrintName() => Console.WriteLine(Name); // 允许访问父类 protected 成员 }
------
2. 访问控制与关键字
• 访问修饰符:
• private:仅父类内部可访问。
• protected:子类可访问,但无法通过父类实例访问(如 parent.ProtectedMember 无效)。
• public:所有类可访问。
• base 与 this:
• base:访问父类被隐藏的成员(如同名方法或属性)。
• this:访问当前类的成员。
【csharp】
public class Parent {
public virtual void Show() => Console.WriteLine("Parent");
}
public class Child : Parent {
public override void Show() {
base.Show(); // 调用父类方法
Console.WriteLine("Child");
}
}
------
3. 方法重写与隐藏
• 虚方法(Virtual/Override):
父类声明 virtual 方法,子类通过 override 覆盖实现多态性。
【csharp】
public class Parent {
public virtual void Print() => Console.WriteLine("Parent");
}
public class Child : Parent {
public override void Print() => Console.WriteLine("Child"); // 多态调用
}
• 隐藏(New):
子类声明同名方法时使用 new 关键字,父类方法在子类中被隐藏(非多态)。
【csharp】
public class Child : Parent {
public new void Print() => Console.WriteLine("Child"); // 隐藏父类方法
}
------
4. 构造函数与初始化
• 构造函数调用:
• 子类默认调用父类的无参构造函数。
• 若父类无无参构造函数,子类必须通过 base 显式调用父类有参构造函数。
【csharp】
public class Parent {
public Parent(string name) { /* ... */ }
}
public class Child : Parent {
public Child(string name, int age) : base(name) { // 显式调用父类构造函数
this.Age = age;
}
}
------
5. 类型转换
• 向上转换:子类可隐式转换为父类类型(安全操作)。
【csharp】
Child child = new Child();
Parent parent = child; // 隐式转换
• 向下转换:父类需显式强制转换为子类类型(可能抛出 InvalidCastException)。
【csharp】
if (parent is Child child) {
child.SpecialMethod(); // 安全转换(推荐使用 as 关键字)
}
------
6. 父类调用子类方法的技巧
• 虚方法重写:父类定义虚方法,子类实现具体逻辑(符合多态原则)。
• 反射(不推荐):动态调用子类特有方法(破坏封装性,慎用)。
------
7. 设计建议
• 单一继承:C# 不支持多继承,但可通过接口(interface)实现多态。
• 避免过度继承:优先使用组合而非继承,降低耦合度。
------
总结
• 核心原则:子类继承父类非私有成员,通过 virtual/override 实现多态,合理使用 base 和 new 处理成员冲突。
• 实践场景:如需要扩展现有类功能(如日志系统、权限管理模块)时,继承可显著提升代码复用性。
通过以上规则,可高效管理类层次结构并实现灵活的业务逻辑设计。
更多推荐


所有评论(0)