返回首页


NET 2.0之前,有没有在C#选择的get和set属性或索引的水平能见度设施。 Andnbsp;我在我的评论,C#不提供get和set访问不同的能见度水平的设施。虽然这部分是正确的的,它是C#2.0中没有更多的。
,显然,这是不容易和优雅的方式。看看这个代码片断:

public bool LogToStdError

{

   get

   {

      return _log2StdError;

   }

   protected set

   {

      _log2StdError = value;

   }

}

我没有解释的代码,除了有一些限制,而有不同的属性的get / set访问的能见度水平。获取或设置,你可以提供一个明确的知名度。因此,下面的代码将抛出一个错误:从而明确指定的能见度,必须是财产申报的一个子集[比限制性]。例如,如果是受保护的财产申报,然后获取/设置访问器不能喜欢说公共。所以下面的代码将抛出一个错误:
protected  bool LogToStdError

{

   get

   {

      return _log2StdError;

   }

   public  set

   {

      _log2StdError = value;

   }

}

我觉得这些限制是愚蠢的,这是因为语法。我只是觉得有点优雅的语法属性定义的一些想法。单独的get和set访问器必须到指定的水平能见度。
bool  LogToStdError

{

   public  get

   {

      return _log2StdError;

   }

   protected set

   {

      _log2StdError = value;

   }

}
财产申报的语法必须不承担任何水平能见度,除非相关的get / set访问器不承担任何。例如,在下面的属性定义,get / set访问是公开的:
public  bool LogToStdError

{

   get

   {

      return _log2StdError;

   }

   set

   {

      _log2StdError = value;

   }

}

,按这个属性定义的get / set访问保护:
protected  bool LogToStdError

{

   get

   {

      return _log2StdError;

   }

   set

   {

      _log2StdError = value;

   }

}
如果有既不在属性定义,也没有在访问器指定的能见度水平,那么缺省的水平能见度指定的C#[我猜内部将属性访问应用。因此get / set访问内部的下列财产:
bool  LogToStdError

{

   get

   {

      return _log2StdError;

   }

   set

   {

      _log2StdError = value;

   }

}
{S0}

回答

评论会员:Kubajzz 时间:2012/01/26
有趣的文章,我真的很喜欢阅读,但几乎所有的东西你说我不同意

首先,我不认为的方式获取和set访问器定义可以作出任何更优雅。

这是有道理的,你可以明确定义的存取只有一个知名度。请看下面的例子:
public bool Flag { private get; private set; }
如果你能为get和set访问器的知名度,你可以创建一个类似上面的属性。这些财产是公有的,但它的存取私人。这意味着该属性是可见的"外部世界",但它不能被读取和写入,因此是绝对没用的... ...并宣布整个私有财产会做相同的。

它也是情理之中的获取和设置可见性修饰符必须更多restrictibe属性修饰符。看这个例子:
private bool Flag { public get; set; }
上面的代码违反了规则,即使它是可以创建一个这样的属性,这将是无用的。如果声明为私有财产,那么整个财产是无形的"外面的世界"。因此,它不使任何意义,它的访问器可见,如果物业本身是无形的。

至于新的语法,你的建议,我再次不同意。无论如何,这个职位已经太长了,所以... ...再次感谢有趣的阅读和有一个愉快的一天{S1}
评论会员:VivekRagunathan 时间:2012/01/26


我想有一件事,你有弄错或可能是我本来可以更清晰的 - 可访问性修饰符应该是指定的存取或财产申报,但不能同时。例如,

bool Flag { public get; private set; }

public bool Flag { get; set; }

因此,这不是有效的语法(按照我的建议,然后):

public bool Flag { private get; private set; }

一些闲聊:我写了很久以前,当属性访问器的个人无障碍规范是在C#中引入。我已经习惯了现在的语法。不管怎么说,我很高兴,这是值得你读。

关于
Vivek Ragunathan
{A2}
编程是一门艺术。代码是一首诗:
|