You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#基类方法如何优雅引用继承类成员,无需手动传参或额外实现

解决方案:使用泛型抽象基类(奇异递归模板模式CRTP)

你可以通过将继承类类型作为泛型参数传递给基类的方式实现需求,完全避开你提到的三种不想要的实现方式,代码如下:

using System;

namespace Test
{
    // 泛型抽象基类,约束类型参数必须继承自当前基类
    public abstract class BaseClass<T> where T : BaseClass<T>
    {
        // 公共方法直接通过强转this获取子类实例,无需额外传参
        public void ReferenceInheriting()
        {
            T inheritingInstance = (T)this;
            // 可直接访问子类的公共字段、属性,也可通过反射访问非公共成员
            Console.WriteLine("Do things specific to the inheriting class or instance thereof: " + inheritingInstance.GetType().Name);
        }
    }

    // 子类继承时仅需指定自身为泛型参数即可,无需编写任何转接逻辑
    public class Inheriting : BaseClass<Inheriting>
    {
        // 可以给子类加自定义的属性、字段供基类访问
        public string CustomProp { get; set; } = "Test value";
    }

    class Program
    {
        public static void Main(string[] args)
        {
            Inheriting inh = new Inheriting();
            // 直接调用基类方法即可,无需传参
            inh.ReferenceInheriting();
        }
    }
}

方案优势

  • 完全不需要在调用基类方法时手动传入子类实例引用
  • 子类不需要单独实现任何转接方法,仅需在继承时指定泛型参数即可
  • 不需要编写额外的扩展方法
  • 如果需要基类固定访问子类的特定成员,可以给泛型参数加上接口约束,基类中就能直接访问对应成员,无需反射处理。

内容的提问来源于stack exchange,提问作者Ben Philipp。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:06:03