c#中接口中为什么可以定义属性,属性和字段不是联系在一起的吗?

WYhack 2010-06-06 02:13:03
c#中接口中为什么可以定义属性,属性和字段不是联系在一起的吗?

我是从Java转过来的,我的理解就是:Java中的属性就是C#中的字段,Java中的getter和setter方法就是C#中的属性

(C#)中的属性不就是对字段操作的吗?我感觉属性和字段就是形影不离的双胞胎(虽然有时候限制字段只读或者是只写)

为什么接口中不允许定义字段却可以存在属性,虽然属性没有返回值?
...全文
1227 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WYhack 2010-06-08
  • 打赏
  • 举报
回复
顶一下!!
viena 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wyhack 的回复:]
我的理解是这里的Hello属性无比要跟一个字段联系起来,会不会实现类在继承接口时候再去声明字段?

我已经说不清楚了,Java中属性是c#中的字段,一会字段一会属性,呼呼!!!
[/Quote]

C#3.0的类里面可以出现这种写法的:
public string Hello { get; set; }
这是所谓的自动属性,编译器会自动创建相应的私有字段的
如果该字段只能由该属性来访问的话,这样可以节省无意义的工作~
缪军 2010-06-06
  • 打赏
  • 举报
回复 2
那个Hello就是个声明,
跟sayHello是一样的
强制它的继承者必须用get set 构造这个Hello

我觉得:接口就像个更纯粹的抽象类
WYhack 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 viena 的回复:]
引用楼主 wyhack 的回复:
(C#)中的属性不就是对字段操作的吗?

未必,属性可以是直接操作某个字段
有的只读属性是对某些字段经过一系列运算的结果
甚至可以是凭空出来的
与字段并非一一对应关系~
[/Quote]

谢谢你,我理解你的意思,刚接触c#,没有太深入的研究!!
WYhack 2010-06-06
  • 打赏
  • 举报
回复
都是星级钻级的大牛回答的,真诚的谢谢你们

这里还有一个疑问

比如说这里有一个接口

interface IMyInterface
{
void sayHello();//不难理解,接口就是一个约定,当然不用实现

string Hello//这里的属性我就理解不动了,字符串类型的变量Hello无缘无故的就出现了
{
get;
set;
}
//可能受Java语法上的影响,接口中没有无缘无故的“变量”(属性?字段?)

}


我的理解是这里的Hello属性无比要跟一个字段联系起来,会不会实现类在继承接口时候再去声明字段?

我已经说不清楚了,Java中属性是c#中的字段,一会字段一会属性,呼呼!!!
Alden 2010-06-06
  • 打赏
  • 举报
回复
接口只是一个约定.限制实现接口的类里必须存在此属性.
viena 2010-06-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 wyhack 的回复:]
(C#)中的属性不就是对字段操作的吗?
[/Quote]
未必,属性可以是直接操作某个字段
有的只读属性是对某些字段经过一系列运算的结果
甚至可以是凭空出来的
与字段并非一一对应关系~
wuyq11 2010-06-06
  • 打赏
  • 举报
回复
接口只一个约定,而抽像类则是可以有自己的实现。
值是对象所拥有的,每个不同的对象会拥有不同的值。而
属性是类所拥有的,所有的对象应该拥有相同的属
接口有字段,那这个字段将无法判定自己属于哪个对象
gomoku 2010-06-06
  • 打赏
  • 举报
回复
接口关心的是方法的约定,而不是方法的实现。
而具体怎么安排字段,要什么字段,字段在内存的位置,则是内部细节,接口不应该管这么宽。

属性的确就是getter和setter,但独立出来成为单独的类别,使它更自然,使得那些对象愿意对外展示的属性(颜色,大小,年纪等),不用通过粗笨的方法来得到。

比如WinForm下的PropertyGrid,就专门显示对象的属性,而不理睬字段或方法。
WYhack 2010-06-06
  • 打赏
  • 举报
回复
好冷

每一个人

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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