嵌套实用程序类的重用

问题描述 投票:0回答:2

我正在设计一个类,在该类中,我希望可以在类内部以完整的形式访问属性,而在外部只能以经过清理的形式访问属性。我的第一个解决方案是实现具有不同访问权限的两个不同的get er:

public class MyClass
{   
   private Foo CompleteFoo { get; set; }
   public Foo SanitizedFoo => CompleteFoo.WithoutSensitiveInfo();
}

随着我班级的增长,它最终具有许多类似的属性,并且必须为每个值定义这些访问器变得很烦人,并使班级难以阅读。因此,我决定引入一个嵌套的帮助器类:

public class MyClass
{
    private class SanitizedValue<T> where T : Sanitizable 
    {
        private T Complete { get; set; }
        public T Sanitized => T.WithoutSensitiveInfo();
    }

    public SanitizedValue<Foo> foo { get; }
} 

现在MyClass本身可以访问SanitizedComplete值,但是外部用户只能访问Sanitized值。

问题是,我发现这个SanitizedValue类是一个非常有用的实用程序,我可能想在各种不同的类中使用某些东西来复制访问权限模式。但是,因为SanitizedValue必须在MyClass内部,才能正确地允许访问Complete属性,所以看来我必须为要使用它的每个父级重写SanitizedValue类。 >

是否有避免这种内部类重复的策略?

我正在设计一个类,在该类中,我希望可以在类内部以完整的形式访问属性,而在外部只能以经过清理的形式访问属性。我的第一个解决方案是实现两个...

c# encapsulation access-rights
2个回答
0
投票

如果您要在此处实现的目的是将公共API的范围缩小到只能从外部访问的那些数据,那么如何引入用于属性签名的公共接口呢?


0
投票

您正在尝试通过访问器而不是使用合同(界面)来限制访问。通过接口来限制类属性,方法和字段的显示要容易得多。

© www.soinside.com 2019 - 2024. All rights reserved.