none
关于接口的定义 RRS feed

  • 问题

  • public interface Ia

    {

         Ib dog{get;}           //这样定义说明了什么呢? dog属性的类型为接口Ib?

    }

    对于软件的二次开发有什么意义?

    2014年1月13日 7:54

答案

  • 就是   为什么 C# 中允许接口定义属性 这个,请问有没有形象的描述

    我不太了解 C# 的文法编写者的意图,我只能从已有的语法中来推导:

    1、class 允许定义属性,如下:

    public class A

    {

       int Age{get;set;}

    }

    2,在 C# 中,属性等价于下面的代码:

    int get_Age();

    void set_Age(int value);

    PS:你需要问为什么 C# 中允许类定义属性吗?

    3、class 可以继承 interface,如下:

    public interface IA

    {

    }

    public class A : IA

    {
    }

    PS:你需要问为什么 C# 允许 class 可以继承 interface 吗?

    4、如果我想通过 IA 来访问实现类 A 的 Age 属性的话,及我可以写如下代码:

    IA a = new A;

    int age = a.Age;

    那么,请问,通过基类或者接口来访问实例的属性是不是编程中需要的一项基本功能?这项基本功能同通过基类或接口来访问实例的方法冲不冲突?


    • 已编辑 Skyseer 2014年1月13日 9:48
    • 已建议为答案 anionoII 2014年1月13日 10:31
    • 已标记为答案 yaoly 2014年1月13日 13:25
    2014年1月13日 9:46
  • 您说的我大概都明白了,不如我举个例子,看看我有没理解错

    比如说

    接口 番茄炒蛋,声明了能做番茄炒蛋,

    属性                声明了需要哪些材料,具体怎么获得,什么分量不说

    方法                声明了了番茄炒蛋是有方法做的,具体怎么做不说

    就是这里    Interface A{get;set} 

    由于  Interface  也是声明了能做什么,所以A就不知道它是什么角色,就是卡在这个点上

    你完全没必要把接口、属性、方法的概念搞的这么复杂,而且你这种比喻是不恰当的,因为 C# 文法并没有要求属性、方法一定要严格的区分职能,也就是说下面的代码都可以完成相同的任务:

    public interface IA

    {

       IB B{get;set;}

    }

    public interface IA

    {

       IB GetB();

       void SetB(IB b);

    }


    我甚至还可以这样写:

    public interface IA

    {

       IB sdklfjsldfjdlskfjsdkljflsdkjfldksf();

       void sdfjsdjflksdjflksdjfklsdjf234kjlkjdsf(IB b);

    }

    • 已编辑 Skyseer 2014年1月14日 1:39
    • 已标记为答案 yaoly 2014年1月15日 2:42
    2014年1月14日 1:37

全部回复

  • 你先回答我的问题:

    public interface Ia

    {

      Ib dog(); //这样定义说明了什么呢?

    }

    2014年1月13日 8:01
  •     public interface IMapBookmarks
        {

            IEnumSpatialBookmark Bookmarks { get; }

            void AddBookmark(ISpatialBookmark bookmark);

            void RemoveAllBookmarks();
    .
            void RemoveBookmark(ISpatialBookmark bookmark);
        }

         我也不知道为什么接口能这样定义
    2014年1月13日 8:12
  •     public interface IMapBookmarks
        {

            IEnumSpatialBookmark Bookmarks { get; }

            void AddBookmark(ISpatialBookmark bookmark);

            void RemoveAllBookmarks();
    .
            void RemoveBookmark(ISpatialBookmark bookmark);
        }

         我也不知道为什么接口能这样定义

    我不知道你到底对 C# 语法都了解些什么,所以我有必要先测试你知道什么,你知道接口为什么能这样定义吗?

    public interface IMapBookmarks

    {

       IEnumSpatialBookmark GetBookmarks();

    }

    2014年1月13日 8:20
  • 这是不是说GetBookmarks()将返回实现 IEnumSpatialBookmark的对象?
    2014年1月13日 8:27
  • 这是不是说GetBookmarks()将返回实现 IEnumSpatialBookmark的对象?

    我有些糊涂了,我只好再提一个问题,请问“GetBookmarks()将返回实现 IEnumSpatialBookmark的对象”同“接口为什么能这样定义”有什么关系吗?

    2014年1月13日 8:49
  • 1.这样定义没有语法错误啊,IEnumSpatialBookmark Bookmarks { get; }定义为IMapBookmarks的一个成员只读属性(property),这个属性(Bookmarks)可以引用实现了IEnumSpatialBookmark的类的对象。

    2.你真正的问题时什么呢?是对这个语法不熟悉,还是为什么要这样子定义有疑问呢?

    2014年1月13日 9:01
  • 怎么说呢

    其实就是属性一般都  例如    int A{get;set}  

    但这里       Interface A{get;set}     这里到底是个什么东西,一直没搞明白

    2014年1月13日 9:05
  • 怎么说呢

    其实就是属性一般都  例如    int A{get;set}  

    但这里       Interface A{get;set}     这里到底是个什么东西,一直没搞明白


    这里也是属性。有什么不明白的?
    2014年1月13日 9:17
  • 就是对  为什么要这样子定义有疑问,因为一般教材都没解析这个,感觉很抽象
    2014年1月13日 9:17
  • 就是对  为什么要这样子定义有疑问,因为一般教材都没解析这个,感觉很抽象
    你是要问为什么 C# 中允许接口定义属性,还是要问写此接口的人为什么要给接口定义属性?
    2014年1月13日 9:20
  • 就是   为什么 C# 中允许接口定义属性 这个,请问有没有形象的描述
    2014年1月13日 9:27
  • 就是   为什么 C# 中允许接口定义属性 这个,请问有没有形象的描述

    我不太了解 C# 的文法编写者的意图,我只能从已有的语法中来推导:

    1、class 允许定义属性,如下:

    public class A

    {

       int Age{get;set;}

    }

    2,在 C# 中,属性等价于下面的代码:

    int get_Age();

    void set_Age(int value);

    PS:你需要问为什么 C# 中允许类定义属性吗?

    3、class 可以继承 interface,如下:

    public interface IA

    {

    }

    public class A : IA

    {
    }

    PS:你需要问为什么 C# 允许 class 可以继承 interface 吗?

    4、如果我想通过 IA 来访问实现类 A 的 Age 属性的话,及我可以写如下代码:

    IA a = new A;

    int age = a.Age;

    那么,请问,通过基类或者接口来访问实例的属性是不是编程中需要的一项基本功能?这项基本功能同通过基类或接口来访问实例的方法冲不冲突?


    • 已编辑 Skyseer 2014年1月13日 9:48
    • 已建议为答案 anionoII 2014年1月13日 10:31
    • 已标记为答案 yaoly 2014年1月13日 13:25
    2014年1月13日 9:46
  • 您说的我大概都明白了,不如我举个例子,看看我有没理解错

    比如说

    接口 番茄炒蛋,声明了能做番茄炒蛋,

    属性                声明了需要哪些材料,具体怎么获得,什么分量不说

    方法                声明了了番茄炒蛋是有方法做的,具体怎么做不说

    就是这里    Interface A{get;set} 

    由于  Interface  也是声明了能做什么,所以A就不知道它是什么角色,就是卡在这个点上

    2014年1月13日 10:42
  • 您说的我大概都明白了,不如我举个例子,看看我有没理解错

    比如说

    接口 番茄炒蛋,声明了能做番茄炒蛋,

    属性                声明了需要哪些材料,具体怎么获得,什么分量不说

    方法                声明了了番茄炒蛋是有方法做的,具体怎么做不说

    就是这里    Interface A{get;set} 

    由于  Interface  也是声明了能做什么,所以A就不知道它是什么角色,就是卡在这个点上

    你完全没必要把接口、属性、方法的概念搞的这么复杂,而且你这种比喻是不恰当的,因为 C# 文法并没有要求属性、方法一定要严格的区分职能,也就是说下面的代码都可以完成相同的任务:

    public interface IA

    {

       IB B{get;set;}

    }

    public interface IA

    {

       IB GetB();

       void SetB(IB b);

    }


    我甚至还可以这样写:

    public interface IA

    {

       IB sdklfjsldfjdlskfjsdkljflsdkjfldksf();

       void sdfjsdjflksdjflksdjfklsdjf234kjlkjdsf(IB b);

    }

    • 已编辑 Skyseer 2014年1月14日 1:39
    • 已标记为答案 yaoly 2014年1月15日 2:42
    2014年1月14日 1:37
  • 看来是我把它搞得太复杂了,看您写的代码,理解为属性本身也是一种方法,可以吗?

    2014年1月15日 2:42
  • 看来是我把它搞得太复杂了,看您写的代码,理解为属性本身也是一种方法,可以吗?

    不可以。

    2014年1月15日 3:47