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

如何将Setter传递给构造函数,实现跨类实例的属性赋值?

实现方案

C# 完全支持这种传递 Setter 的实现方式,你可以通过委托来封装属性的赋值逻辑,具体实现如下:

核心改造点

属性的 Setter 本质是一个入参为属性类型、无返回值的方法,你可以用Action<T>委托承接对应的逻辑,注意Setter 属于类的实例成员,必须绑定具体的实例后才能传递使用。

完整可运行代码

public class ClassA
{
    // 私有存储字段
    private int _val;
    // 暴露结果用于验证,可按需调整访问权限
    public int Val => _val;
    // 两个不同逻辑的Setter
    public int Setter1 { set => _val = value * 100; }
    public int Setter2 { set => _val = value * 200; }
}

public class ClassB
{
    // 存储传入的Setter委托
    private readonly Action<int> _setterDelegate;
    // 包装成属性,实现和原生属性一致的赋值语法
    public int Setter
    {
        set => _setterDelegate(value);
    }

    // 构造函数传入绑定了实例的Setter委托
    public ClassB(Action<int> setterDelegate)
    {
        _setterDelegate = setterDelegate;
    }
}

调用示例

// 先实例化Setter所属的ClassA对象
var aInstance = new ClassA();
// 绑定不同的Setter到ClassB实例
var b1 = new ClassB(v => aInstance.Setter1 = v);
var b2 = new ClassB(v => aInstance.Setter2 = v);

// 完全符合你期望的调用效果
b1.Setter = 1;
Console.WriteLine(aInstance.Val); // 输出 100
b2.Setter = 2;
Console.WriteLine(aInstance.Val); // 输出 400

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:30:03