在开发工具中,它显示如下类型:
IClass {Class23}
在调试器中(运行时),它将其显示为以下类型:
Class23
IClass
和Class23
具有不同的属性,似乎我可以在它作为类型运行时访问它,但是当我尝试为{{1}编写属性时,它不会构建因为intellisense要我输入Class23
的属性。有人可以解释这种行为以及当对象为IClass
时我应该如何从Class23
访问属性?
我尝试了这个,但它只返回null:
IClass {Class23}
帮助!
一些代码,不确定它是否有帮助:
Class23 myclass = Function(returns IClass {Class23}) as Class23
答案 0 :(得分:5)
随着更新:
IEnumerable<IClass> links = Cats.Links;
// this should actually be `Class23`
var Name = links.ElementAt(0).Name; //<--Error
这里的错误是您的期望。如果序列为IClass
,则ElementAt(0)
会返回IClass
。你没有自动施法(除非你作弊,并且:不要)。如果您知道该项目是Class23
,那么:
var Name = ((Class23)links.ElementAt(0)).Name; // could also use .First()
你也可以使用:
IEnumerable<Class23> links = Cats.Links.Cast<Class23>();
但是,坦率地说,我认为你不应该在界面中查看。如果IClass
公开Name
非常有用,那么将Name
添加到interface
。
在开发工具中,它显示如下类型:
听起来就像您所指的“它”被静态输入为IClass
,并且已经提供了Class23
的实例,恰好实现了{{} 1}}。那很好也很正常 - 没有错(名字除外)。但是接口的全部意义在于不应该通常需要与类型成员交谈:您应该只需要通过接口公开的API。如果你需要更多:你已经打破了抽象。然而,有时候,是的 - 你需要来打破抽象,例如某些方面的特殊情况。在这种情况下......演员:
IClass