| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1150 人关注过本帖
标题:关于取值访问器和赋值,为什么要用这个,直接把字段弄成public的不行吗
只看楼主 加入收藏
myemail1983
Rank: 2
来 自:南京
等 级:新手上路
威 望:3
帖 子:256
专家分:0
注 册:2008-7-27
结帖率:100%
收藏
 问题点数:0 回复次数:8 
关于取值访问器和赋值,为什么要用这个,直接把字段弄成public的不行吗
get {}
set{}
书上也说了一此,比如说set这里可以根据需要加限制,
但我看一些程序,限制都是加在前台代码上了,
直接用public有什么问题?
能不能举个最实际的例子说明下
搜索更多相关主题的帖子: 赋值 public 字段 访问 
2008-10-14 19:17
ecjob
Rank: 3Rank: 3
等 级:论坛游侠
威 望:8
帖 子:321
专家分:110
注 册:2006-10-15
收藏
得分:0 
用到的时候你就自然会需要了。。 你知道有这种东西就可以了。。
你觉得没必要用就不用吧。呵呵。。 具体问题具体分析
MSDN也有比较祥细的说明:


属性可以提供公共数据成员的便利,而又不会带来不受保护、不受控制以及未经验证访问对象数据的风险。这是通过“访问器”来实现的:访问器是为基础数据成员赋值和检索其值的特殊方法。使用 set 访问器可以为数据成员赋值,使用 get 访问器可以检索数据成员的值。

此示例演示 Person 类,该类具有两个属性:Name (string) 和 Age (int)。这两个属性都提供 get 和 set 访问器,因此它们被视为读/写属性。

示例
C#  复制代码
class Person
{
    private string m_name = "N/A";
    private int m_Age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return m_name;
        }
        set
        {
            m_name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return m_Age;
        }

        set
        {
            m_Age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        System.Console.WriteLine("Person details - {0}", person);

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        System.Console.WriteLine("Person details - {0}", person);

        // Increment the Age property:
        person.Age += 1;
        System.Console.WriteLine("Person details - {0}", person);
    }
}


 

  复制代码
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
 

可靠编程
在上面的示例中,Name 和 Age 属性是公共的,并且同时包含 get 和 set 访问器。这允许任何对象读写这些属性。不过,有时需要排除其中的一个访问器。例如,省略 set 访问器将使该属性成为只读的:

C#  复制代码
public string Name
{
    get
    {
        return m_name;
    }
}


 

此外,您还可以公开一个访问器,而使另一个访问器成为私有的或受保护的。有关更多信息,请参见非对称访问器可访问性。

声明了属性后,可像使用类的字段那样使用这些属性。这使得获取和设置属性值时都可以使用非常自然的语法,如以下语句中所示:

C#  复制代码
person.Name = "Joe";
person.Age = 99;


 

注意,属性 set 方法中可以使用一个特殊的 value 变量。该变量包含用户指定的值,例如:

C#  复制代码
m_name = value;


 

请注意用于使 Person 对象上的 Age 属性递增的简洁语法:

C#  复制代码
person.Age += 1;


 

如果将单独的 set 和 get 方法用于模型属性,则等效代码可能类似于:

  复制代码
person.SetAge(person.GetAge() + 1);
 

本示例中重写了 ToString 方法:

C#  复制代码
public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}


 

注意,程序中未显式使用 ToString。默认情况下,它由 WriteLine 调用来调用。
收到的鲜花
  • 小仙2008-10-15 15:21 送鲜花  25朵   附言:我很赞同

86年出生,广东求 女人/项目/工作 ,见广告即有效.论坛PM
2008-10-14 19:23
kku5_cn
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-14
收藏
得分:0 
这个是属性

[url=www./nokia/]诺基亚手机主题[/url][url=www.]连连看[/url]
2008-10-14 19:29
myemail1983
Rank: 2
来 自:南京
等 级:新手上路
威 望:3
帖 子:256
专家分:0
注 册:2008-7-27
收藏
得分:0 
谢谢ecjob的回答,呵呵,够明了

寻找学习的动力,承接小型程序设计,呵呵,为了激励自己学习下。
虽然做不到无私,但会学着去帮助别人
2008-10-14 19:57
SecretX
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2008-7-31
收藏
得分:0 
等遇到了自然就用到了~
2008-10-14 22:30
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
2楼回答得很详细

转眼就从编程菜鸟混成了半灌水
2008-10-15 08:39
huanganjun
Rank: 1
来 自:广东
等 级:新手上路
帖 子:149
专家分:0
注 册:2008-10-15
收藏
得分:0 
在set属性中很有用,可以避免一些错误数据,比如就刚才的例子,
set{
   if(age<0)
    {age=18;}
  }
2008-10-15 09:50
lubi
Rank: 1
等 级:禁止访问
帖 子:43
专家分:0
注 册:2008-10-14
收藏
得分:0 
是啊,别人做也这样的东西,总有别人的道理.只是我们不究了解.

中国最先进的MES http://www.
2008-10-15 13:31
小仙
Rank: 7Rank: 7Rank: 7
来 自:光之谷
等 级:贵宾
威 望:39
帖 子:1812
专家分:1
注 册:2008-8-8
收藏
得分:0 
我觉得,我所体会到属性的两个优点,第一个不用说了,可以验证赋值,第2个,没有属性的话,你将看不到任何数据源。


仁者乐膳,智者乐睡。我都爱~
2008-10-15 15:18
快速回复:关于取值访问器和赋值,为什么要用这个,直接把字段弄成public的不行吗 ...
数据加载中...
 
   



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

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