属性需要访问私有类吗?

And*_*ndy 3 c# state object private-class

我使用私有类的实例作为提供给stream.BeginRead操作的状态对象.(该类对我的主流读/写类是私有的.)

public class MainClass
{
    // ...

    private class ResponseState
    {
        public IResponse response;
        public Stream stream;
        public byte[] buffer = new byte[1024];
    }
}
Run Code Online (Sandbox Code Playgroud)

可以直接通过字段访问课程.在这种情况下,我是否真的应该通过属性提供对类的访问,即使它只用于保持状态?

有兴趣知道其他人做了什么.

Mar*_*ers 5

它不是C#语言所必需的,但出于可维护性的原因,最好不要直接公开字段 - 建议使用属性.

请参见StyleCop SA1401:FieldsMustBePrivate.

TypeName - FieldsMustBePrivate
CheckId - SA1401
类别 - 可维护性规则

原因

C#类中的字段具有除private之外的访问修饰符.

规则说明

只要类中的字段被赋予非私有访问权限,就会违反此规则.出于可维护性的原因,应始终将属性用作公开类外部字段的机制,并且应始终使用私有访问声明字段.这允许属性的内部实现随时间改变而不改变类的接口.

位于C#结构中的字段允许具有任何访问级别.

如何修复违规行为

要修复违反此规则的行为,请将该字段设为私有,并添加一个属性以公开该类之外的字段.

如果您的类纯粹是包含类的状态,那么您可以考虑将成员直接放在使用它们的类中.如果你的课程不仅仅是国家(我怀疑它是),那么它应该遵循通常的可维护性规则.