我有一个下面的类,我已经将所有属性提取到接口但我似乎无法提取它...显然创建一个新的对象,如
ITestItem item = new TestItem();
不允许我访问作为Meta类实例的Properties。
我还想阻止任何人在TestItem之外创建一个Meta类的实例...我尝试将其标记为内部但是这样可以允许我,因为属性是公开的。
我也不确定我是否需要META接口?
这是我的班级......任何人都可以帮忙吗?
public class TestItem : ITestItem
{
public bool Enabled { get; set; }
public Meta Properties = new Meta();
public List<int> Items { get; set; }
public class Meta
{
internal Meta
{
}
public string Name { get; set; }
}
public TestItem()
{
this.Items = new List<int>();
}
}
修改 我已经使用了上面的类来包含Meta的内部构造函数,因此它不能在类外实例化。
这是我的界面(正如giddy所建议的那样)......现在说它没有实现属性
public interface ITestItem
{
bool Enabled { get; set; }
Meta Properties { get; set; };
List<int> Items { get; set; }
}
答案 0 :(得分:2)
所以你会:
不想使用术语 extract 进行交互,也许你对接口的想法有点不对。你想在这里做一些阅读。
在Test类中定义Meta
类。根据您要创建实例的位置标记构造函数internal
或private
。
创建一个在Test
类
public class TestItem : ITestItem
{
public TestItem()
{
this.Properties = new Meta();//set it from here
this.Items = new List<int>();
}
public bool Enabled { get; set; }
//make it private set if you don't want an outsider setting it
public Meta Properties {get;private set}
public List<int> Items { get; set; }
public class Meta
{//make it private if you only create an instance here.
internal Meta(){}
public string Name { get; set; }
}
}
您还可以在界面中添加Meta
属性:
public interface ITestItem
{
bool Enabled { get;set;}
Meta Properties { get;set;}
List<int> Items { get;set;}
void ScheduleItem();
}
答案 1 :(得分:1)
你可以试试这个。它编译在VS2010中。无论如何,为了“解耦类”以允许单元测试,也可以为Meta提取接口。请搜索并阅读 - “解耦课程”。
public class Meta { // Do not make this class a child class for flexibility and testing purposes.
public string Name { get; set; }
}
public class IMeta {
string Name { get; set; }
}
public class TestItem : ITestItem {
public TestItem() {
this.Meta = new Meta();
this.Items = new List<int>();
public bool Enabled { get; set; }
public IMeta Meta { get; internal set; }
public List<int> Items { get; set; }
}
public interface ITestItem {
bool Enabled { get; set; }
IMeta Meta { get;}
IList<int> Items { get; set; }
}