【问题标题】:Can I create an automatic property (no private member) with get and set code?我可以使用 get 和 set 代码创建自动属性(无私有成员)吗?
【发布时间】:2009-03-20 03:33:13
【问题描述】:

在 c# 中,我可以这样做:

public int Foo { get; set; }

这很好。但是只要我想在 getter 或 setter 中做任何事情,我就必须将其更改为:

private int foo;
public int Foo {
    get { return foo; }
    set {
        foo = value;
        DoSomething();  // all that other code, just to add this line!
    }
}

是否可以避免这种情况?我希望能够做这样的事情:

public int Foo {
    get;
    set {           
       DoSomething();
    }
}

我离上面还有多远?

【问题讨论】:

    标签: c# properties automatic-properties


    【解决方案1】:

    不,无法使用现有 C# 版本或 C# 4.0 中的属性执行此操作。

    【讨论】:

      【解决方案2】:

      正如其他人所说,没有内置的方法可以做到这一点。

      您可以使用PostSharp 实现类似的效果。但我不确定它是否值得努力。

      [AfterSet(DoSomething)]
      public int Foo {
          get;
          set;
      }
      

      【讨论】:

      • 很有趣,但我认为你是对的——这不值得:P
      • 你能举个例子吗?这对我来说很有趣:)!
      【解决方案3】:

      使用自动属性,编译器会为您生成一个支持字段。自定义 getter/setter 要求您手动创建一个支持字段来使用。在自动属性上指定自定义 getter/setter 的能力本质上使它就像一个方法一样,因为没有任何东西可以获取或设置。

      【讨论】:

        【解决方案4】:

        简短的答案?不,长答案?对不起,还是不行。 :) 我能感觉到你的痛苦,但事实就是这样。

        【讨论】:

          猜你喜欢
          • 2021-01-08
          • 2019-05-09
          • 2014-03-31
          • 1970-01-01
          • 1970-01-01
          • 2020-05-07
          • 2013-04-03
          • 1970-01-01
          • 2015-08-19
          相关资源
          最近更新 更多