只有相应的财产可以访问一个字段吗?

时间:2014-07-14 18:18:59

标签: c# .net

假设我们有一个私有支持字段和一个公开该字段的私有财产。如果任何代码(甚至类中的代码)尝试访问或修改除了属性之外的字段而没有在自己的对象中封装字段和属性,C#是否支持属性或任何其他语法来强制编译器错误?请参阅下面的一个简单示例。

/// <summary>
/// Class to cache and quickly access data. Please only use this class if 1) the data to be cached  uses little memory and 2) the number of DB reads is high and could cause a performance strain.
/// </summary> 
class BMIDataCache
{
    #region fields
        protected static BMITimedDictionary<String, Device> _devices;
    #endregion

    #region properties
    protected static BMITimedDictionary<String, Device> Devices
    {
        get
        {
            if (_devices == null)
            { 
                _devices = new BMITimedDictionary<String, Device>();
                //Do some other stuff later.
            }
            return _devices;
        }
        set
        {
            _devices = value;
        }
    }
public void Test1()
{ //Inside this method, trying to access _devices will cause a compiler error, but not Devices
}
}

1 个答案:

答案 0 :(得分:5)

C#中没有任何内容可以帮助您隐藏同一类成员的private字段。

您的选择:

  • 一些后期处理(即使用FxCop进行代码分析的自定义插件)
  • 将此字段/属性移动到基类中并标记字段private。然后将实际代码添加到派生类 - 因此派生类将无法访问字段
  • 使用带有接口的包含。

旁注:你将无法隐藏反射中的字段......