【发布时间】:2021-11-25 22:24:44
【问题描述】:
我想在我的 FilterSelection 模型中封装 Filter 类,这样 Filter 就不能自己实例化。但是试图设置一个属性来访问列表我得到这个错误:
可访问性不一致:属性类型比属性更难访问
public class FilterSelection
{
public List<Filter> List { get; set; }
public FilterSelection()
{
List = new List<Filter>();
}
private class Filter
{
public string CustomFilterName { get; set; }
public string workBook { get; set; }
}
}
【问题讨论】:
-
您不能将一个属性暴露给可能使用您的类的代码,而不暴露该属性的类型。换句话说,如果您要让我的代码创建一个 FilterSelection 并且因此您要让我访问“List”(我会鼓励一个更好的名称),如果“List”是“Filter”对象的集合,如果我知道“过滤器”是什么,它们对我有什么用?因此,要么类“过滤器”需要是公共的,要么属性“列表”需要是私有的。或者,如果您只想在 FilterSelection 类中使用它而不公开它,则可以将两者都设为“内部”。
-
定义一个公共接口,让你的类继承它并声明你的 List
成员 - 例如。 dotnetfiddle.net/1pSjrT -
标记
List属性private set;请记住,从列表中添加和删除项目仍然是get操作,即使您正在进行更改:您“获取”对对象的引用,然后使用引用调用对象的“Add()”成员函数。
标签: c# api oop encapsulation access-modifiers