我正在设计一个类,在该类中,我希望可以在类内部以完整的形式访问属性,而在外部只能以经过清理的形式访问属性。我的第一个解决方案是实现具有不同访问权限的两个不同的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
本身可以访问Sanitized
和Complete
值,但是外部用户只能访问Sanitized
值。
问题是,我发现这个SanitizedValue
类是一个非常有用的实用程序,我可能想在各种不同的类中使用某些东西来复制访问权限模式。但是,因为SanitizedValue
必须在MyClass
内部,才能正确地允许访问Complete
属性,所以看来我必须为要使用它的每个父级重写SanitizedValue
类。 >
是否有避免这种内部类重复的策略?
我正在设计一个类,在该类中,我希望可以在类内部以完整的形式访问属性,而在外部只能以经过清理的形式访问属性。我的第一个解决方案是实现两个...
如果您要在此处实现的目的是将公共API的范围缩小到只能从外部访问的那些数据,那么如何引入用于属性签名的公共接口呢?
您正在尝试通过访问器而不是使用合同(界面)来限制访问。通过接口来限制类属性,方法和字段的显示要容易得多。