无法访问List <interface>中的类的公共成员

时间:2019-03-02 19:05:43

标签: c#

我正在尝试创建实现接口的对象列表。我可以访问接口成员,但似乎无法访问在类本身中声明的任何其他成员。

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,则可以访问它。

2 个答案:

答案 0 :(得分:3)

这是因为列表中的所有项目均为ObservableValue类型,并且此接口不包含属性C。如果要获取电影的预算,必须首先检查列表中的项目是否为电影,然后将其类型转换为IItems

Budget

区分不同实现的另一种方法是在切换情况下使用C#7模式匹配:

Movie

答案 1 :(得分:0)

那是因为您的界面没有预算作为公共成员。

如果要创建抽象类型的列表,请重构接口以使其具有int budget { get; set; }

这是因为您的列表正在评估抽象类型的属性,而不是子实现的属性。