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

如何在C#中重命名派生类/接口实现类的继承成员?

在C#中重命名继承/实现的成员

一、实现接口时自定义成员名称

C#没有VB那种直接指定接口成员实现名称的语法,但可以通过显式接口实现+封装公共成员的方式达成相同效果:

对应VB中重命名接口方法的场景,C#代码示例如下:

public interface IDemo
{
    void DoSomething();
}

public class ImplementIDemo : IDemo
{
    // 显式实现接口成员,仅能通过接口类型访问
    void IDemo.DoSomething()
    {
        // 这里写方法逻辑
    }

    // 自定义名称的公共方法,内部调用显式实现的接口逻辑
    public void AnotherSomething()
    {
        ((IDemo)this).DoSomething();
    }
}

// 使用示例
IDemo varAsInterface = new ImplementIDemo();
varAsInterface.DoSomething(); // 通过接口实例调用原方法

ImplementIDemo varAsClass = new ImplementIDemo();
varAsClass.AnotherSomething(); // 通过类实例调用自定义名称的方法

显式接口实现的成员默认私有,只能通过接口实例访问;自定义的公共成员则可直接通过类实例调用,完全匹配VB中Implements指定成员名称的效果。

二、继承抽象类时重命名属性

针对抽象类的抽象属性,C#无法直接重命名替代实现,但可以通过重写基类成员+封装自定义属性的方式实现类似需求:

假设基类定义为:

public abstract class Base<T>
{
    public abstract T Children { get; set; }
}

派生类要将Children重命名为AnotherNameProp,可采用如下写法:

public class Derived<T> : Base<T>
{
    // 重写基类抽象属性,设为保护级别仅内部使用
    protected override T Children { get; set; }

    // 自定义名称的公共属性,封装基类的Children属性
    public T AnotherNameProp
    {
        get => Children;
        set => Children = value;
    }
}

如果想完全隐藏基类的Children属性,也可以用new关键字隐藏,但这种方式容易造成调用歧义,不推荐:

public class Derived<T> : Base<T>
{
    private T _backingField;
    // 必须实现基类的抽象属性
    public override T Children { get => _backingField; set => _backingField = value; }

    // 用new关键字隐藏基类属性,提供自定义名称
    public new T AnotherNameProp
    {
        get => _backingField;
        set => _backingField = value;
    }
}

内容的提问来源于stack exchange,提问作者Владимир Оношко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:35:17