c#中接口中为什么可以定义属性,属性和字段不是联系在一起的吗?我是从Java转过来的,我的理解就是:Java中的属性就是C#中的字段,Java中的getter和setter方法就是C#中的属性(C#)中的属性不就是对字段操作的吗?我感觉属性和字段就是形影不离的双胞胎(虽然有时候限制字段只读或者是只写)为什么接口中不允许定义字段却可以存在属性,虽然属性没有返回值?

解决方案 »

  1.   

    接口关心的是方法的约定,而不是方法的实现。
    而具体怎么安排字段,要什么字段,字段在内存的位置,则是内部细节,接口不应该管这么宽。属性的确就是getter和setter,但独立出来成为单独的类别,使它更自然,使得那些对象愿意对外展示的属性(颜色,大小,年纪等),不用通过粗笨的方法来得到。比如WinForm下的PropertyGrid,就专门显示对象的属性,而不理睬字段或方法。
      

  2.   

    都是星级钻级的大牛回答的,真诚的谢谢你们这里还有一个疑问比如说这里有一个接口interface IMyInterface
    {
    void sayHello();//不难理解,接口就是一个约定,当然不用实现

    string Hello//这里的属性我就理解不动了,字符串类型的变量Hello无缘无故的就出现了
    {
    get;
    set;
    }
    //可能受Java语法上的影响,接口中没有无缘无故的“变量”(属性?字段?)}我的理解是这里的Hello属性无比要跟一个字段联系起来,会不会实现类在继承接口时候再去声明字段?我已经说不清楚了,Java中属性是c#中的字段,一会字段一会属性,呼呼!!!
      

  3.   

    那个Hello就是个声明,
    跟sayHello是一样的
    强制它的继承者必须用get set 构造这个Hello我觉得:接口就像个更纯粹的抽象类
      

  4.   


    C#3.0的类里面可以出现这种写法的:
    public string Hello { get; set; }
    这是所谓的自动属性,编译器会自动创建相应的私有字段的
    如果该字段只能由该属性来访问的话,这样可以节省无意义的工作~