1

在 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();
    }
}

我能离上面多近?

4

4 回答 4

6

不,没有办法对现有版本的 C# 或 C# 4.0 中的属性执行此操作。

于 2009-03-20T03:35:26.933 回答
2

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

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

[AfterSet(DoSomething)]
public int Foo {
    get;
    set;
}
于 2009-03-20T03:55:52.780 回答
0

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

于 2009-03-20T03:49:46.853 回答
0

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

于 2009-03-20T03:50:32.607 回答