我们可以在set属性中使用访问说明符并获取C#

时间:2013-07-14 17:34:55

标签: c# c#-4.0 c#-3.0

我们可以在C#中的属性中获取/设置访问说明符吗?请解释一下示例和用法,以及好处和暗处。这是一个面试问题。

5 个答案:

答案 0 :(得分:2)

是的,访问修饰符对getset有效。有一些常见的事情是拥有私有或受保护的set,因此只能从类实例成员中分配属性。

  

属性或索引器的get和set部分称为访问器。默认情况下,这些访问者具有相同的可见性或访问级别:它们所属的属性或索引器的可见性或访问级别。但是,限制对这些访问者之一的访问有时很有用。通常,这涉及限制set访问器的可访问性,同时保持get访问器可公开访问

有关此主题的更多信息,请查看MSDN文章中的Restricting Accessor Accessibility

答案 1 :(得分:1)

这个片段就是一个很好的例子......

    public interface IHasInt
    {
        int TheInt { get; }
    }
    public class MyClass : IHasInt
    {
        public int TheInt { get; private set; }
        public MyClass()
        {
            TheInt = 123;
        }
    }

在此示例中,接口指定了getter,但未指定setter。因此,当某人拥有该接口的实例时,他们只能访问该值,但不能改变它。

另一方面,实现类需要设置属性,也不希望任何人改变它。所以财产得到......

a public getter to abide by the terms of the interface; and
a private setter to allow the class to do its work

使用接口实例的任何人都无法更改类的属性(从而将类置于随机状态)。对属性的更改只能在类本身内进行,因为setter是私有的。

.NET Framework Library中有很多这样的情况。

对于'darkside',如果界面设计不佳而且客户需要更改属性,那么最终必须重写。此外,如果在示例中已将setter声明为“private”,则会阻止后代类访问该属性,这可能会导致“shadow”覆盖,并且几乎总会导致混乱。

答案 2 :(得分:0)

规则是,如果属性都是一个getter和一个setter(get访问者和set访问者),那么只允许一个额外的访问修饰符<这些访问者中有一个,并且访问者的可访问性大多数更多受限制,而不是整个属性的可访问性。

以下是一个例子:

class ContainingType
{
  public int MyProp
  {
    get
    {
      // code here, must return something
    }

    private set
    {
      // code here, may use special parameter 'value'
    }
  }
}

在示例中,getter是(仍然)public,与整个属性一样,而setter具有更受限制的访问权限,此处为private

将属性视为一对方法,其中一个方法的访问级别可能比另一个方法更受限制。

答案 3 :(得分:0)

是的,您可以拥有get,set的访问说明符,但有一些规则:

  • 访问者的辅助功能级别必须更多限制,而不是属性上的辅助功能级别

  • 仅当属性或索引器具有两者设置并获取访问者时,才能使用访问者修饰符。在这种情况下,只允许在两个访问者的一个中使用修饰符。

答案 4 :(得分:0)

是的,我们可以在C#中使用访问说明符来获取/设置属性。 如果我们不使用带有get / set属性的访问说明符,那么我们就无法访问相关属性的值,即获取/设置值。