[英]Protection of acces with Auto-Implemented Properties in C#
一个简单的例子。 替代文字http://img19.imageshack.us/img19/1854/51445300.jpg
A有一个TDMReader类,它是TDMFile对象的对象,我正在使用自动实现的属性fe
public string Name
{
get;
set;
}
public Group[] Groups
{
get;
set;
}
我想要做的是使setter仅可用于TDMReader方法。 在C ++中,我可以有用于访问私有变量的Friends方法,在Java中,我可以将它们放在一个包中,从而可以访问字段。 我有一些想法,但是使用这种自动实现的方法要复杂一些。 有什么想法可以解决吗?
自动属性对此没有影响-相同的选项可用于自动属性和“手动”属性。 您可以像这样限制设置器的访问:
// Setter access only to this type and nested types
public string Name { get; private set; }
// Setter access within the assembly
public Group[] Groups { get; internal set; }
等等
...但是您不能为单个类做到这一点(除非该类嵌套在声明类型中,在这种情况下, private
是可以的)。 .NET或C#中没有名称空间限制的访问。
(尚不清楚属性在哪个类中声明-如果它们是TdmReader
属性,则将它们TdmReader
私有。如果它们是TdmFile
属性,则存在上述问题。)
像这样:
public string Name
{
get;
private set;
}
public Group[] Groups
{
get;
private set;
}
通过添加private
关键字,将只能通过同一类中的代码来访问设置器。 您还可以添加internal
,以使其可用于同一项目中的代码。
请注意,将数组公开为属性是非常糟糕的设计。
相反,您应该在System.Collections.ObjectModel
命名空间中公开Collection<Group>
或ReadOnlyCollection<Group>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.