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

C#实现第三方只读接口时,如何在子类为继承属性添加set访问器

C# 只读接口属性内部赋值的规范实现方案

方案1:显式实现接口+强类型属性(推荐)

这是符合现代C#最佳实践的标准实现方式,既严格满足第三方接口的契约要求,又能方便地操作可写属性:

public class Person : IPerson
{
    // 显式实现IPerson接口的只读属性,满足接口契约
    IPersonData IPerson.PersonData => PersonData;
    
    // 自定义强类型可读写属性,用于类内部/直接实例场景下的操作
    public PersonData PersonData { get; set; } = new PersonData();

    public void SomeMethod()
    {
        // 直接赋值无编译错误
        PersonData.Name = "JohnDoe";
    }
}

该方案的优势:

  • 完全符合接口实现要求:当实例被作为IPerson类型使用时,只能拿到只读的IPersonData属性,严格遵守第三方接口定义
  • 无需冗余的后台字段定义,代码简洁易维护
  • 无需强制类型转换,无运行时报错风险

方案2:运行时类型转型

如果不想新增额外的公开属性,可以在需要赋值的位置做强制类型转换:

// 在Person类的方法内使用
((PersonData)PersonData).Name = "JohnDoe";

该方案的优缺点:

  • 优势:不需要修改属性定义,代码改动最小
  • 劣势:每次赋值都需要转型,存在运行时转型失败的风险(如果后续PersonData的实现被替换为其他IPersonData实现的话)

内容的提问来源于stack exchange,提问作者Plaje

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:54:05