.net 第二级属性的无异常设置器

dm7nw8vv  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(107)

当使用组合方法时,一个类A引用类B,而类B有一些属性,是否有一种方法可以在每次初始化类B的一个属性时自动初始化类B?考虑所有内容都是公共的。

class A { 
  B MemberB { get; set; } = null; // Has to stay NULL by default 
}

class B { 
  int Id { get; set; }
  string Name { get; set; }
}

var instanceA = new A();

instanceA.MemberB.Name = "Demo"; // How to auto-instantiate MemberB without exception?

限制条件

  1. MemberB在实际使用其属性之前应保持为NULL,没有默认值
    1.语法不应该有太大的变化,所以没有属性 Package 器检查NULL
  2. DynamicObject只有在每次使用时不必将示例转换为dynamic时才能使用
smdnsysy

smdnsysy1#

MemberB_memberB)的后备字段,在get时自初始化:

private B? _memberB;

public B MemberB {
    get => _memberB ?? (_memberB = new B());
    set { _memberB = value; }
}

这可能会违反你的限制2,但它就是这样。
优化可能是使用Lazy<T>,但这需要比这里显示的更多的仪式,特别是考虑到属性的类型可能不应该改变,并且您仍然希望支持setter。

相关问题