繁体   English   中英

用C#自动实现的属性保护acces

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM