接口问题

84913146432 2017-03-29 09:12:38
public ISysResource SysResource { get { return new SysResourceDataAccess(); } }

public partial interface ISysResource : IDbHelper<SysResourceEntity>

public partial class SysResourceDataAccess : DbHelper<SysResourceEntity>, ISysResource

表部分是怎么个原理?有大神解答下么?
...全文
212 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
84913146432 2017-03-29
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
[quote=引用 6 楼 zhy3644 的回复:] 那返回的还是 接口类型的对象?还是 class类型 的对象 ?项目里其他的位置可以直接调用class 里的function,但返回的修饰符是 接口类型的。
你自己试试就知道了
static void Main(string[] args)
        {
            ITest t = new Test();
            t.Say();

            Console.ReadLine();
        }

        public interface ITest
        {
            void Say();
        }

        public class Test : ITest
        {
            public void Say()
            {
                Console.WriteLine("Test");
            }
        }
ITest t = new Test();其实和你的属性public ISysResource SysResource { get { return new SysResourceDataAccess(); } } 是一个道理。 这是一个多态的概念。父类指向子类的引用的概念。 [/quote] 已经理解了 , 感谢指点。
正怒月神 版主 2017-03-29
  • 打赏
  • 举报
回复
引用 6 楼 zhy3644 的回复:
那返回的还是 接口类型的对象?还是 class类型 的对象 ?项目里其他的位置可以直接调用class 里的function,但返回的修饰符是 接口类型的。
你自己试试就知道了
static void Main(string[] args)
        {
            ITest t = new Test();
            t.Say();

            Console.ReadLine();
        }

        public interface ITest
        {
            void Say();
        }

        public class Test : ITest
        {
            public void Say()
            {
                Console.WriteLine("Test");
            }
        }
ITest t = new Test();其实和你的属性public ISysResource SysResource { get { return new SysResourceDataAccess(); } } 是一个道理。 这是一个多态的概念。父类指向子类的引用的概念。
  • 打赏
  • 举报
回复
返回的是实际对象,只是没有完全展示,只展示了接口那一部分 你可以这样理解 阿拉伯风俗要求女人不能漏给陌生人看到身体部位,所以她们用毛巾把自己裹得严严实实的,只漏出眼睛 然后你就知道她是人,然后眼睛就是她唯一公开给你看的东西,其它脸蛋,身材什么的你都看不到
84913146432 2017-03-29
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
[quote=引用 4 楼 zhy3644 的回复:] 明明定义的接口类型ISysResource return 确实个class SysResourceDataAccess
.....因为子类可以安全的转换为父类。 就像
public static object Test()
        { 
            string a="123123";
            return a;
        }
但是反过来就不行,下面这个要报错
public static string Test()
        { 
            object a="123123";
            return a;
        }
[/quote] 那返回的还是 接口类型的对象?还是 class类型 的对象 ?项目里其他的位置可以直接调用class 里的function,但返回的修饰符是 接口类型的。
正怒月神 版主 2017-03-29
  • 打赏
  • 举报
回复
引用 4 楼 zhy3644 的回复:
明明定义的接口类型ISysResource return 确实个class SysResourceDataAccess
.....因为子类可以安全的转换为父类。 就像
public static object Test()
        { 
            string a="123123";
            return a;
        }
但是反过来就不行,下面这个要报错
public static string Test()
        { 
            object a="123123";
            return a;
        }
84913146432 2017-03-29
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
先看这句 public partial interface ISysResource : IDbHelper<SysResourceEntity> ISysResource接口继承了IDbHelper<T>,一个接口继承另一个接口,实际上就是对当前接口的扩充而已。 public partial class SysResourceDataAccess : DbHelper<SysResourceEntity>, ISysResource 然后 先看SysResourceDataAccess 继承了ISysResource。说明 SysResourceDataAccess 需要实现ISysResource中的接口,而ISysResource中带有IDbHelper的所有接口。 那么SysResourceDataAccess 继承DbHelper 后,显而易见就不用再实现一遍IDbHelper的接口 了。 直接实现ISysResource就好了。 最后public ISysResource SysResource { get { return new SysResourceDataAccess(); } } 就是获取SysResourceDataAccess
public ISysResource SysResource { get { return new SysResourceDataAccess(); } }问题就在这啊 明明定义的接口类型ISysResource return 确实个class SysResourceDataAccess
正怒月神 版主 2017-03-29
  • 打赏
  • 举报
回复
先看这句 public partial interface ISysResource : IDbHelper<SysResourceEntity> ISysResource接口继承了IDbHelper<T>,一个接口继承另一个接口,实际上就是对当前接口的扩充而已。 public partial class SysResourceDataAccess : DbHelper<SysResourceEntity>, ISysResource 然后 先看SysResourceDataAccess 继承了ISysResource。说明 SysResourceDataAccess 需要实现ISysResource中的接口,而ISysResource中带有IDbHelper的所有接口。 那么SysResourceDataAccess 继承DbHelper 后,显而易见就不用再实现一遍IDbHelper的接口 了。 直接实现ISysResource就好了。 最后public ISysResource SysResource { get { return new SysResourceDataAccess(); } } 就是获取SysResourceDataAccess
丰云 2017-03-29
  • 打赏
  • 举报
回复
partial 是c#用于分散管理类定义的语法, 用一个标注的相同类名的各个定义,在编译时,会自动组合到一起。 这不是什么了不起的或者深奥的东西,可以无视,事实上,我本人是反对在项目里这么用的
  • 打赏
  • 举报
回复
看这个接口定义方式,应该是repository模式

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧