C#接口继承(基础知识)

Ant*_*ler 4 c# inheritance .net-2.0

为什么以下产生编译器错误:

public interface OwnSession : ISession { }

[...]
OwnSession s = SessionFactory.OpenSession(); // compiler error (in german unfortunately)
[...]
Run Code Online (Sandbox Code Playgroud)

"SessionFactory"在"OpenSession()"(NHibernate)上返回"ISession"

Phi*_*ert 10

您应该投射结果:

OwnSession s = (OwnSession) SessionFactory.OpenSession();
Run Code Online (Sandbox Code Playgroud)

如果OpenSession()返回一个ISession类型,它可能是实现ISession的任何东西,所以你必须告诉编译器你期望一个OwnSession类型(只有当你确定它会返回那个当然)

另一方面,您可以将变量声明为ISession,并继续使用它.除非您想使用OwessSession类型中的方法或属性,这些方法或属性在ISession接口规范中不可用.

  • 除此之外:您应该针对接口而不是实现进行开发.这意味着你应该使用"ISession s = SessionFactory.OpenSession();" 因为SessionFactory可以返回几种不同类型的会话(或者你以后可能想要自己使用另一种会话类型) (3认同)

Ste*_*gli 5

返回的对象只是"ISession",它不是"OwnSession"(顺便说一下,你应该用I:IOwnSession作为前缀).想象一下,你有一个函数返回一个汉堡,你不能把它作为一个cheesburger,因为它可能不是一个...