带有非自动属性的c#匿名支持字段

本文关键字:支持 字段 属性 | 更新日期: 2023-09-27 18:04:29

我想做一个私有成员变量,它是私有的,甚至是拥有它的类,只能通过它的getter和setter访问。我知道你可以用自动属性比如

private int MyInt{ get; set;}

但是我希望能够修改getter和setter,这样(例如)我可以记录字段被设置了多少次(甚至是由拥有的类)。像这样

private int MyInt
{
    get{ return hiddenValue; }
    set{ hiddenValue = value; Console.Out.WriteLine("MyInt has been set");}
}

,其中"hiddenValue"是只能在getter和setter中访问的成员。为什么?因为我是一个偏执的防御性程序员,我甚至不相信自己:p.

这在c#中可能吗?如果有,语法是什么?

谢谢。

带有非自动属性的c#匿名支持字段

你真的应该相信自己。

不,你不能让一个变量如此私有,即使是封装类也看不到它。

如果你真的想要这个,你可以把值封装在一个嵌套类中,这样就可以覆盖它自己的私有值。

class Foo 
{
    class Bar // nested
    {
        private int _value;
        public int Value 
        {
            get { return _value; }
            set { _value = value; /* logic */ }
        }
    }
}

Foo可以实例化Bar, get at Bar。

对于。net中的任何语言都是不可能的。而且很好。防御性编码是好的,但是当它变得偏执时,它会让其他需要维护它的开发人员发疯。

面向方面的编程(AOP)可能会有所帮助,简而言之,它允许您在方法调用之前和/或之后注入您选择的代码。

查看http://code.google.com/p/easyprop/,这是一个专门为监视属性变化而设计的AOP库,并且有使用自动属性的示例。

我还没有用过图书馆,但是它看起来正合你的胃口。

不,这在c#中是不可能的。

你最好的办法可能是变得不那么偏执。: P

你想要做的,在。net中是无法实现的。

即使隐藏的后台字段在IL代码中也是可见的。这意味着,虽然你不能在设计时看到它(在VS),它将在编译后。