我正在尝试创建实现接口的对象列表。我可以访问接口成员,但似乎无法访问在类本身中声明的任何其他成员。
public interface IItems
{
string Name {get;set;}
}
public class Movie : IItems
{
public string Name {get;set;}
public int Budget {get;set;}
}
public class Book : IItems
{
public string Name {get;set;}
public int Pages {get;set;}
}
List<IItems> items = new List<IItems> { new Movie(), new Book() };
因此,现在如果我尝试访问items[0].Budget
,则找不到Budget
成员。但是,如果我尝试items[0].Name
,则可以访问它。
答案 0 :(得分:3)
这是因为列表中的所有项目均为ObservableValue
类型,并且此接口不包含属性C
。如果要获取电影的预算,必须首先检查列表中的项目是否为电影,然后将其类型转换为IItems
:
Budget
区分不同实现的另一种方法是在切换情况下使用C#7模式匹配:
Movie
答案 1 :(得分:0)
那是因为您的界面没有预算作为公共成员。
如果要创建抽象类型的列表,请重构接口以使其具有int budget { get; set; }
这是因为您的列表正在评估抽象类型的属性,而不是子实现的属性。