0

一个简单的例子。 替代文字 http://img19.imageshack.us/img19/1854/51445300.jpg

A 有一个 TDMReader 类,它是 TDMFile 对象的 buldier,我正在使用 Auto Implemented Properties fe

    public string Name
    {
        get;
        set;
    }

    public Group[] Groups
    {
        get;
        set;
    }  

我想要做的是让 setter 只能用于 TDMReader 方法。在 C++ 中,我可以使用朋友方法来访问私有变量,在 Java 中,我可以将它们放在一个数据包中,从而访问字段。我有一些想法,但这种自动实现有点复杂。有什么想法可以解决吗?:)

4

2 回答 2

4

自动属性与此无关 - 相同的选项可用于自动属性和“手动”属性。您可以像这样限制设置器的访问:

// 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; }

ETC

...但是您不能为单个类执行此操作(除非该类嵌套在声明类型中,在这种情况下private会很好)。.NET 或 C# 中没有名称空间限制的访问。

(尚不完全清楚属性在哪个类中声明 - 如果它们是TdmReader属性,则只需将它们设为私有。如果它们是TdmFile属性,则存在上述问题。)

于 2010-05-12T20:16:34.303 回答
2

像这样:

public string Name
{
    get;
    private set;
}

public Group[] Groups
{
    get;
    private set;
}  

通过添加private关键字,setter 将只能由同一类中的代码访问。您还可以添加internal以使其可访问同一项目中的代码。


请注意,将数组作为属性公开是非常糟糕的设计。
相反,您应该在命名空间中公开一个Collection<Group>or 。ReadOnlyCollection<Group>System.Collections.ObjectModel

于 2010-05-12T20:15:55.373 回答