如何将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
相关产品推荐
相关产品推荐

