标题:请问在创建一个类的同时为其创建一个属性有何好处?
只看楼主
卜卜
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-22
 问题点数:0 回复次数:9 
请问在创建一个类的同时为其创建一个属性有何好处?

今天在做一个类的练习的时候遇到一个关于属性的问题

我创建了一个类,如下面代码所示:


// 1.创建一个存储半径和圆心圆类,2. 给这个圆类添加一个属性
class round
{

public int my_x;
public int my_y;
public double r;

public int x
{
get
{
return my_x;
}
set
{
my_x = value;
}
}

public int y
{
get
{
return my_y;
}
set
{
my_y = value;
}
}
}

class roundApp
{
public static void Main()
{
round point = new round();
round rad = new round();


point.x = 1;
point.y = 4;
rad.r = 5;
Console.WriteLine("This is a round r and point!");
Console.WriteLine("The point is ({0},{1})", point.x, point.y);
Console.WriteLine("The r={0}", rad.r);

}


}


其中红色的部分就是 创建了一个属性,可是用public int x; public int y;

就能代替了,为什么要用那么长的代码(属性)来编写呢? 两者有什么区别? 或者有什么作用和好处呢?


请懂得的人帮我解答,谢谢你们了~em01]

搜索更多相关主题的帖子: 属性 dir ltr style 
2007-07-23 16:41
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
得分:0 
哈哈

你这样弄,你的属性就没有用啊
你都公有化字段了,属性是针对字段的私有化的。给外界一个访问和修改私有化字段的机会,同时可以提供验证。

面向对象的三个特点是:封装,继承,多态

封装就是这个意思吧,不可以让外界随便访问类的字段啊

jorden008@
2007-07-23 16:48
卜卜
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-22
得分:0 
谢谢啊,你说的是要把public 改成 private对吧~

为梦想而努力,相信······ ~.~
2007-07-23 23:29
jasonxie
Rank: 1
等 级:新手上路
威 望:2
帖 子:225
专家分:0
注 册:2007-3-19
得分:0 
属性是为了实现封装,也就是信息隐藏,而且代码看上去很整齐
恩,要把访问符改为私有的才有作用

你是我心内的一首歌,不要只是个过客;在我生命留下一首歌,无论结局会如何.
2007-07-23 23:53
mlrh3838
Rank: 1
等 级:新手上路
威 望:1
帖 子:199
专家分:0
注 册:2007-6-14
得分:0 

2楼和4楼的理解有点片面哦,属性在复杂应用中很有用的,但像你上面那段代码就不是很有必要,所以你看不出重要性

比如:

private int _y;
private int _x;

public int Y
{
get
{
if(_y>10)
{
return _y;
}

else
{
retrun _y+1;
}
set
{
_y = value;
}
}


2007-07-24 01:12
立志成佛
Rank: 1
等 级:新手上路
威 望:2
帖 子:314
专家分:0
注 册:2006-11-1
得分:0 

个人感觉:

属性还有一个重要的功能就是将原来的变量类型进行转变:
private string str;//在这里是值类型传递
如果我们封装到属性后就更改为引用类型传递


曾经的曾经已不在
2007-07-24 11:04
卜卜
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-22
得分:0 
以下是引用mlrh3838在2007-7-24 1:12:22的发言:

2楼和4楼的理解有点片面哦,属性在复杂应用中很有用的,但像你上面那段代码就不是很有必要,所以你看不出重要性

比如:

private int _y;
private int _x;

public int Y
{
get
{
if(_y>10)
{
return _y;
}

else
{
retrun _y+1;
}
set
{
_y = value;
}
}


谢谢,我明白了,呵呵,不过你在get中少打了一个“}”哦~


为梦想而努力,相信······ ~.~
2007-07-24 11:07
卜卜
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-22
得分:0 
感谢大家的回答,你们的答案对我都很有帮助~  谢谢

为梦想而努力,相信······ ~.~
2007-07-24 11:08
天堂落日
Rank: 2
等 级:论坛游民
威 望:2
帖 子:182
专家分:10
注 册:2007-6-17
得分:0 

属性应该是C#里边的首创吧^
当时看第一本书的时候就在思考这个问题(不过数看完之后还是没什么结果)呵呵
后来看到了一本《Beginning C# Objects》——概念到模型,才明白属性的真正强大意义!
一、控制访问权限
不要以为已经有了访问控制符public,private就可以完美实现要求,利用属性,你可以实现类数据成员的只读,或者只写权限,或者是读写权限,是不是和前边的两个控制符不同?(这个很容易理解,我就不举例子了)
二、有助于实现数据完整性
(数据完整性这个理论来自于数据库理论术语,我也不知道用在这里 合适不合适)
例如在一个student类当中,有这样一个数据成员age和一个属性Age;在这里我们将让你见识到属性的巨大威力:
[CODE]
namespace CeshiProperty
{
public class Student
{
private int age;
public int Age
{
get
{
return age;
}
set
{
do
{
if (value < 0)
{
System.Console.WriteLine("您输入的年龄太小了,请重新输入:");
value = int.Parse(System.Console.ReadLine());
}
else if (value > 200)
{
System.Console.WriteLine("您输入的年龄太大了,请重新输入:");
value = int.Parse(System.Console.ReadLine());
}
} while (value < 0 || value > 200);
age = value;
}
}
}
class Program
{
static void Main(string[] args)
{
Student a = new Student();
System.Console.WriteLine("请输入您的年龄:");
a.Age = int.Parse(System.Console.ReadLine());
System.Console.WriteLine("您输入的年龄是:{0}", a.Age);
}
}
}
[/CODE]

[此贴子已经被作者于2007-7-29 3:53:46编辑过]


2007-07-29 03:36
飙马
Rank: 5Rank: 5
来 自:马里亚纳
等 级:贵宾
威 望:15
帖 子:779
专家分:280
注 册:2007-3-28
得分:0 
9楼的这个例子挺不错的。属性的确用处蛮多的,个人觉得,它最多的是封装起来方便其它项目调用。就像你建了汽车的类,里面设置好了它的所有属性。在以后编写小轿车、卡车、公交车这些类的时候,我们就可以引用汽车这个类,就可以直接使用它的属性了!

IT精英如同彩票:平凡的人像5块也中不到一样普遍,努力一点你中了5元保了个本。奖金越高,机率也就越小,付出的也越多,盖茨如同500万一样稀有。虽然每天忙碌而平凡,但我努力成为精英,做梦中了500万。
2007-07-29 10:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-157517-1-1.html




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

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