| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1032 人关注过本帖
标题:这句话有什么作用?帮我解释一下好吗?
只看楼主 加入收藏
zhangbambo
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-8
收藏
 问题点数:0 回复次数:9 
这句话有什么作用?帮我解释一下好吗?

刚学C#,不明白下面代码的意思,麻烦各位指点!(先get后 set是为什么?)

public int Hour

{

get

{

return hour;

}

set

{

hour=((value>=0 && value<24)?value:0);

}

}

搜索更多相关主题的帖子: 解释 
2004-10-09 17:21
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
[转帖]
  3. 属性(Property)

  属性的概念对大家来说应该是很熟悉的,类成员函数可以自由地访问本类? 任何属性成员。不过若要从一个类中去访问另一个类中的属性,那就比较麻烦了,所以很多时候我们使用Getxxx和Setxxx方法,这样看起来显得极不自然,比如用Java或者C++,代码是这样的:

  foo.setSize (getSize () + 1);
  label.getFont().setBold (true);

  但是,在C#中,这样的方法被“属性化”了。同样的代码,在C#就变成了:

  foo.size++;
  label.font.bold = true;

  可以看出来,C#显然更容易阅读和理解。我们从这个“属性方法”的子程序代码中,也可以看到类似情况:

Java/C++:

public int getSize()
{
  return size;
}

public void setSize (int value)
{
  size = value;
}

C#:
public int Size
{
 get{return size;}
 set{size = value;}
}

  为了区分这种属性化的方法和类的属性成员,在C#中把属性成员称作“域(field)”,而“属性”则成为这种“属性化的方法”专用的名词。顺便说一句,其实这样的属性化方法在VB和DELPHI中是经常碰到的,在VB中它也就叫属性。

  另外,在C#中Get和Set必须成对出现,一种属性不能只有Get而没有Set(在Java和C++中就可以只有Get或者只有Set),C#中这样做的好处在于便于维护,假如要对某种属性进行修改,就会同时注意Get和Set方法,同时修改,不会改了这个忘了那个。

  4、对象索引机制(Indexer)

  C#中引入了对象索引机制。说得明白点,对象索引其实就是对象数组。这里和上一节中的属性联系起来讲一下,属性需要隐藏Get和Set方法,而在索引机制中,各个对象的Get或者Set方法是暴露出来的。比如下面的例子就比较清楚地说明了这一点。

public class Skyscraper
{
 Story[] stories;
 public Story this [int index] {
  get {
   return stories [index];
  }
  set {
   if (value != null) {
    stories [index] = value;
   }
  }
 }
...
}

Skyscraper empireState = new Skyscraper (...);
empireState [102] = new Story ("The Top One", ...);
2004-10-09 20:25
风中涟漪
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2004-8-9
收藏
得分:0 

get和set是沿袭C++的属性,using System; class Date { public int Day{ get { return day; } set { day = value; } } int day; public int Month{ get { return month; } set { month = value; } } int month; public int Year{ get { return year; } set { year = value; } } int year; };

这样和C++的private给day、month、year是一样的,只不过C#给了方便一点的,可以在类外调用属性,例如:

Date date; date.year = 1983; date.month = 10; date.day = 2;

在C++中,就必须调用所谓的借口类来取属性,C#中直接一点。

我也初学,可能我也不太理解,不好意思。


2004-10-09 20:37
zhangbambo
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-10-8
收藏
得分:0 

那为什么,它要先get 后set,在这里面 get 、set 起什么作用啊?

2004-10-11 14:01
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
呵呵,那个get和set是和类的属性一起用的,有的书不叫属性叫特性,有的书两个都不叫,现在还没统一翻译,而get和set的位置是可以调转。反正一个是取属性,一个是处理属性。还有一个特殊的索引this[],也用到getset处理,具体你找找书。
2004-10-12 22:20
风中涟漪
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2004-8-9
收藏
得分:0 
这里用到的和C++的对象好象差不多,其实差别就在,getset可以控制条件来读取和修改成员变量,也就是属性,而C++普通对象只可以直接存取。

2004-10-13 02:12
jacky
Rank: 1
等 级:新手上路
帖 子:104
专家分:0
注 册:2004-12-17
收藏
得分:0 
不是get和set必须成对出现
可以设置一种属性为只读或只写
get即为只读
set即为只写
2005-03-18 16:19
Andylauzxb
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-10-15
收藏
得分:0 
回复:(live41)[转帖]

你讲的是哪本书上的啊 可以把这本书介绍给我吗,我觉得很详细

2007-10-20 20:57
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
收藏
得分:0 

说简单一点,属性就是 为了能提高在跨对象之间访问安全性.

[此贴子已经被作者于2007-10-20 22:15:24编辑过]


C#Winform技术群:25380362
博客:http:///boyliupan/
2007-10-20 22:13
wang54554
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-10-27
收藏
得分:0 
不介意顶下吧

2007-10-28 18:07
快速回复:这句话有什么作用?帮我解释一下好吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017832 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved