我是初学C#的,比较低级的问题不明白,高手帮忙!!!
在C#中,有这样的一段代码
public string MouseOverBorderColor
{
get
{
return _mouseOverBorderColor;
}
set
{
_mouseOverBorderColor = value;
}
}
比如是这样的,在这段代码中,get,set分别是什么意思?这样做的目的?get,set中的返回值?在什么情况下要这样做?请XDJM们帮忙啊,我是初学的,万分感激!!!
分不够再加!!!
问题点数:100、回复次数:19Top
1 楼zyzj216(秋水玲珑寒)回复于 2003-12-20 12:41:37 得分 0
_mouseOverBorderColor在之前已定义
public string _mouseOverBorderColor 且已赋值
Top
2 楼mableboy(★★★★★)回复于 2003-12-20 12:44:22 得分 6
MouseOverBorderColor是一个属性,get 就是你取这个属性的值,
set就是你给这个属性赋值
比如:
xxx=MouseOverBorderColor;时就是取值
MouseOverBorderColor=xxx;时就是赋值
Top
3 楼mableboy(★★★★★)回复于 2003-12-20 12:45:51 得分 2
当你定义一个你的变量的时候可以这么做阿,这不方便吗,又很好看.Top
4 楼programEasy(森重宽)回复于 2003-12-20 12:47:08 得分 2
这是C#的“属性”特性,GET表示得到,而SET表示设置,GET ,SET,VALUE 都不是关键字
Top
5 楼sashilover(闭门思过中。。。。)回复于 2003-12-20 12:48:36 得分 2
那是属性,定义get块说明程序可以得到其值,定义set块程序可以设置其值,根据需要你可以舍弃其中任何一块Top
6 楼gccr(古城痴人)回复于 2003-12-20 12:56:05 得分 10
C#中的 属性 。
它会使你很方便的使用你定义的变量而不用get() 和set()方法。
get就是 得到你要用的这个变量的值_mouseOverBorderColor,
set就是 给_mouseOverBorderColor赋值,
但是你在用的时候不用这两个单词。
比如:
string ss = MouseOverBorderColor;
MouseOverBorderColor = "HelloWorld";
就可以啦。
很方便的。
Top
7 楼w3kmaster(小良)回复于 2003-12-20 12:59:50 得分 30
网上的一篇介绍C#属性教程,可以大概了解一下
C#教程第十课:属性
(Joe Mayo 2001年06月08日 10:59)
本节课将介绍C#的属性,其目的包括:
1.理解什么是属性
2.如何实现属性
3.创建一个只读属性
4.创建一个只写属性
属性是C#中独具特色的新功能。通过属性来读写类中的域,这具有一定的保护功能。在其它语言中,这是通过实现特定的getter和setter方法来实现的。C#的属性具有保护功能,可以让你就象访问域一样访问属性。要了解属性的用法,我们先来看看如何用传统的方法对域进行封装。
1.清单 10-1. 传统的访问类的域的例子:Accessors.cs
using System;
public class PropertyHolder
{
private int someProperty = 0;
public int getSomeProperty()
{
return someProperty;
}
public void setSomeProperty(int propValue)
{
someProperty = propValue;
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder();
propHold.setSomeProperty(5);
Console.WriteLine("Property Value: {0}", propHold.getSomeProperty());
return 0;
}
}
说明
1.清单 10-1 演示了用传统方法访问类的域的例子。
PropertyHolder类有个我们感兴趣的域someProperty, PropertyHolder类带有两个方法:getSomeProperty和setSomeProperty。getSomeProperty方法返回someProperty域的值。SetSomeProperty方法设置域someProperty的值。
2.类PropertyTester使用类PropertyHolder中的方法来获取someProperty域的值。
Main方法中新创建了一个PropertyHolder对象,之后通过使用setSomeProperty方法,调用propHold对象的setSomeProperty方法,设置其值为5。之后,调用Console.WriteLine方法输出属性值。对propHold对象的getSomeProperty的调用,是用来获取属性值的。它输出"Property Value: 5"到控制台。
3.这种传统的访问域的信息的方法是很好的,因为它支持面向对象的封装的概念。
如果在对域someProperty的实现中,域的类型从int 类型变为byte类型,上述的方法仍然适用。现在,如果采用属性的话,其实现会做得更为平滑。
2.清单 10-2. 使用属性访问类的域:Properties.cs
using System;
public class PropertyHolder
{
private int someProperty = 0;
public int SomeProperty
{
get
{
return someProperty;
}
set
{
someProperty = value;
}
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder();
propHold.SomeProperty = 5;
Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
return 0;
}
}
说明
1.清单 10-2 演示了如何创建和使用属性。
PropertyHolder类中有个"SomeProperty" 属性的实现。注意:属性名的首字母必须大写,这是属性名"SomeProperty"和域名"someProperty"的唯一区别。属性有两种访问操作:get和set。Get访问操作返回的是someProperty域的值。Set访问操作是设置someProperty域的值,其值为"value"的内容。Set访问符号后面的"value"是C#中的保留字。通常,在其他场合下使用"value"关键字会出错。。
2.PropertyTester 类使用PropertyHolder类中的SomeProperty属性。
在Main方法的第一行中, 创建了PropertyHolder对象propHold。之后,把propHold对象的 someProperty 域的值设置为5,很简单,就象对域赋值一样,给属性赋值。
3.Console.WriteLine方法输出 propHold对象的someProperty域的值。
这是通过使用propHold对象的SomeProperty属性来完成的。很简单,就象对域赋值一样,赋值给属性。属性可以设置为只读的,这可以通过在属性的实现中只设一个get访问符号来实现。
3.清单 10-3. 只读属性: ReadOnlyProperty.cs
using System;
public class PropertyHolder
{
private int someProperty = 0;
public PropertyHolder(int propVal)
{
someProperty = propVal;
}
public int SomeProperty
{
get
{
return someProperty;
}
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder(5);
Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
return 0;
}
}
说明
1.清单10-3 演示了如何实现只读属性。
PropertyHolder类中,SomeProperty 属性只有一个get访问操作,没有用到set访问操作。PropertyHolder类中还有个接受整型参数的构造函数。
2.在PropertyTester类的Main方法中,创建了新名为propHold的PropertyHolder类的对象。
propHold对象在实例化时,调用了带参数的PropertyHolder构造函数。在本例中,参数值为5,这对propHold 对象的someProperty域的值进行了初始化。
3.因为PropertyHolder 类的SomeProperty属性是只读的,所以没有其他的方法来设置someProperty域的值。
如果你插入了"propHold.SomeProperty = 7"语句到程序清单中,该程序编译将不会通过,因为SomeProperty是只读属性。在Console.WriteLine 方法中使用SomeProperty属性时,程序执行正常。这是因为该方法调用了SomeProperty属性的get访问操作,这是个只读操作。
4.清单 10-4. 只写属性: WriteOnlyProperty.cs
using System;
public class PropertyHolder
{
private int someProperty = 0;
public int SomeProperty
{
set
{
someProperty = value;
Console.WriteLine("someProperty is equal to {0}", someProperty);
}
}
}
public class PropertyTester
{
public static int Main(string[] args)
{
PropertyHolder propHold = new PropertyHolder();
propHold.SomeProperty = 5;
return 0;
}
}
说明
1.清单 10-4 演示了如何创建和使用只写属性。
这一次,在PropertyHolder类中的SomeProperty属性中,去掉了get访问操作,而加上了set访问操作。其功能是输出someProperty域的值。
2.在PropertyTester 类中的Main方法中,用缺省的构造函数对PropertyTester类进行初始化。
之后,使用propHold 对象的SomeProperty属性,设置该域的值为5。这就调用了propHold 对象的set访问操作, 把someProperty 域的值设置为5,最后,把"someProperty is equal to 5"的信息输出到控制台。
小结
现在,你已经了解了什么是属性,以及属性的使用方法,你也了解了使用属性和使用传统的类的方法之间的区别。属性可以是只读的,也可以是只写的,每种场合下的使用方法,你都有所了解。
Top
8 楼CHReich(龙争四舞)回复于 2003-12-20 13:07:42 得分 4
简言之就是,你通过鼠标或键盘输入数据,而又要让获得的数据传送给别的变量或方法!
比如你要做一个查询系统,你让用户在一个文本框中输入他要查找的内容,用get/set就可以得到用户的输入然后传递给你的用于查找的方法!Top
9 楼ghostboy1020(买女孩的小火柴)回复于 2003-12-20 14:49:39 得分 4
就是设置他的属性,读写Top
10 楼RickyHuang(南山流水)回复于 2003-12-20 15:20:53 得分 10
不过是为了隐藏其属性变量的数据,
public string MouseOverBorderColor
{
get
{
return _mouseOverBorderColor;
}
set
{
_mouseOverBorderColor = value;
}
}
_mouseOverBorderColor 是private 权限的属性
get 就相当于 get_mouseOverBorderColor()
set 就相当于 set_mouseOverBorderColor(string strvalue)Top
11 楼xcode21(PCDIY)回复于 2003-12-20 16:59:49 得分 8
这是C#中对属性的定义
对于属性,你可以理解为一个变量
当你读取这个变量的时候,Get语句块被调用,其中return返回的部分就是读取这个属性所的到的值
当你写入这个变量的时候,Set语句块被调用,其中value的值就是写入的值。
Get/Set是关键字,不是函数,没有返回值。
这样做的好处就是你可以在类中声明一个公开变量,别人可以访问这个变量,但是可以控制别人的存取,例如,你做一个组件,让用户输入月份,这个月份是int变量,用户可以随便输入,但是实际月份是控制在1-12之间的,这样,你就可以让这个变量中的set代码块检测用户赋值是否是1-12之间的数,是则写入核心变量,不是则抛出异常或者给予提示。Top
12 楼epsmagamaga(马夹)回复于 2003-12-20 18:33:25 得分 5
C#中的 属性 。
它会使你很方便的使用你定义的变量而不用get() 和set()方法。
get就是 得到你要用的这个变量的值_mouseOverBorderColor,
set就是 给_mouseOverBorderColor赋值,
但是你在用的时候不用这两个单词。Top
13 楼kangzerun(野狼11)回复于 2003-12-20 18:56:36 得分 2
c# 中的属性
get()表示得到,set 表示设置Top
14 楼orbitbd(大天二)回复于 2003-12-21 09:08:56 得分 2
_mouseOverBorderColor一般是private的,你希望只能由你的类控制这个变量,就可以用get()和set()作存储控制Top
15 楼nanyu(南郁(d2school.com))回复于 2003-12-21 09:54:58 得分 2
一看就知你没有学过Delphi或Borland C++ Builder..呵呵.比起这二者的 get set ,C#的实在是太小儿科了...可能下个版本会强如Delphi或CB.必竟是同一个设计者.所以你可以超前学习一个Delphi里的Object Pascal,或者CB里对C++的扩展.Top
16 楼zhpsam109(JACKY.昊昊)回复于 2003-12-21 10:56:39 得分 2
get,set访问器!找本书看看!C#的书都会介绍这个东西!Top
17 楼njx(放飞力量)回复于 2003-12-21 11:51:39 得分 2
这就是属性,c#完美封装性的具体体现,但不乏有些时候是脱了裤子放屁.像什么时候用属性什么时候用方法什么时候用变量这样的问题我觉得有一本,红皮的叫c#程序员参考手册的书讲的比较精练,可以参考一下.:)Top
18 楼brightheroes(在地狱中仰望天堂)回复于 2003-12-21 12:05:38 得分 2
建议看下书
否则这样在论坛上混
没有前途
Top
19 楼laodeng72586(天呀,地呀,神呀,靠,无聊吗?干活去!)回复于 2003-12-21 14:21:10 得分 5
呵呵,楼主是不是做面向过程的程序设计转到面向对象的程序设计中来的呀。
如果是的话,建议多点抛开以前的,多点想想现在的,不要对比噢,要不又回去啦,还想不明白的。这个可能是每个刚转型的人都会有的吧,当初我也是这样。不过多想想,多做做就好了。Top





