学习c#的过程中,常常遇到这样的语句:

public string StudentName

{

  get{return stuName;}  set{stuName=value;}

}

《Visual c#.net程序设计教程》笔记:在许多面向对象程序设计语言中,属性 { Student stu = new Student(); Console.Write(stu.StudentName); Console.ReadKey(); } } }

下面代码中定义了一个属性StudentName,它蕴含get拜访器和set拜访器。属性StudentName封装了类Student中的字段stuName,字段如果没有加拜访控制符,被默认为private,外界不能间接拜访它,当初外界能够通过StudentNamee属性自在地存取 stuName字段了。

属性的get和set都是可执行的程序语句组合,具备行为的特点;而应用具备get拜访器和set拜访器的属性时候就像应用字段一样,即能够作为左值承受数据,又能够作为右值输入数据,零碎正是依照属性呈现在语句中的地位,主动地抉择是调用get还是调用set。

属性的读写管制

    属性中的get和set能够只用一个,如果只有get而没有set,那么这个属性只可读出,不可写入;如果只有set而没有get,那么这个属性是只写入,不可读出。

在属性中实现更多功能

    既然get和set是程序,那当然能够做更多的事件。一个正当的分工是:设计字段是为了便于外部办法应用,而尽量与外界断绝;设计属性思考的是不便外界的应用,然而不让外界晓得的数据一律不给。

具体阐明:

set 拜访器与返回 void 的办法相似。它应用称为 value 的隐式参数,此参数的类型是属性的类型。在下例中,set 拜访器被增加到Name 属性:

public string Name
{
get
{

  return name; 

}
set
{

  name = value; 

}
}
当对属性赋值时,用提供新值的参数调用 set 拜访器。例如:

e1.Name = "Joe"; // The set accessor is invoked here
在 set 拜访器中对局部变量申明应用隐式参数名 (value) 是谬误的。

备注
属性按如下形式,依据所应用的拜访器进行分类:

只带有 get 拜访器的属性称为只读属性。无奈对只读属性赋值。
只带有 set 拜访器的属性称为只写属性。只写属性除作为赋值的指标外,无奈对其进行援用。
同时带有 get 和 set 拜访器的属性为读写属性。
在属性申明中,get 和 set 拜访器都必须在属性体的外部申明。

应用 get 拜访器更改对象的状态是一种谬误的编程款式。例如,以下拜访器在每次拜访 number 字段时都产生更改对象状态的副作用。

public int Number
{
get
{

  return number++;   // Don't do this

}
}
能够将 get 拜访器用于返回字段值,或用于计算字段值并将其返回。例如:

public string Name
{
get
{

  return name != null ? name : "NA";

}
}
在上述代码段中,如果不对 Name 属性赋值,它将返回值NA。

示例 1
此例阐明如何拜访基类中被派生类中具备同一名称的另一个属性暗藏的属性。
// property_hiding.cs
// Property hiding
using System;
public class BaseClass
{
private string name;
public string Name
{

  get   {     return name;   }  set   {     name = value;   }

}
}

public class DerivedClass : BaseClass
{
private string name;
public new string Name // Notice the use of the new modifier
{

  get   {     return name;   }  set   {     name = value;   }

}
}

public class MainClass
{
public static void Main()
{

  DerivedClass d1 = new DerivedClass();  d1.Name = "John"; // Derived class property  Console.WriteLine("Name in the derived class is: {0}",d1.Name);  ((BaseClass)d1).Name = "Mary"; // Base class property  Console.WriteLine("Name in the base class is: {0}",     ((BaseClass)d1).Name);   

}
}
输入
Name in the derived class is: John
Name in the base class is: Mary
以下是上例中显示的重点:
派生类中的属性 Name 暗藏基类中的属性 Name。在这种状况下,派生类的该属性申明应用 new 修饰符:
public new string Name
{
...
转换 (BaseClass) 用于拜访基类中的暗藏属性:
((BaseClass)d1).Name = "Mary";


在类中定义一个属性
public class Student
{
private string name
public string Name
{
set{name=value;}//这里是给公有属性name赋值
get{return name;}//这里取出公有属性name的值
}
}
c#在定义类时,通常要把类中申明的对象封装起来,使得外界不能拜访这个属性。上述代码中如果去掉set局部,则外界只能读取name的值,如果去掉get局部,则只能给name赋值。这样就能够管制外界对公有属性name的拜访权限了,这种写法是C#的一个个性。

当然你也能够通过本人创立函数来对name进行取值和赋值,但这样就显得比拟麻烦了。

属性与一般变量不同就在于, 一般变量就是放在屋子里的货色, 是什么样明明白白. 而属性则是在屋子的门口放了个守门人, 你拿货色放货色要通过他.

这个守门人就是属性拜访器, 拿货色就是 get, 放货色就是 set. 怎么拿怎么放是它说了算, 尽管你感觉如同就是间接拿间接放差不多.
GET SET 就是对外的接口 ,个别在实例中拜访成员数据须要这个成员数据的拜访形式为PUBLIC ,当初C#很高级了,GET 就是获取,SET 就是设置,然而它提供了跟好的膨胀性,对GET 和SET 能够独自设置拜访权限 比方你对某个成员数据只能读取或者只写,或者只有派生类能够拜访等。。。 绝对以前来说,没有属性拜访器,须要通过函数来调用公有成员数据,属性提供了高效的拜访模式和简略的书写。
就是为了平安啊~~
字段是你具体要操作的数据所以他的值不能出错,可是你又不能防止用户犯错~~
为了平安就用属性来给字段赋值,因为 在set中你能够对数据的平安进行验证,
get就更简略了验证完数据了就要把值给了字段所以要get
set的中文意思是“设置”;
get的中文意思是“取得”;

补充:

get 和 set 会在相应的时候主动调用
次要是为了暗藏程序内的数据结构时用
get是获取该属性的值,
set设置该属性的值。
在用set时有一个非凡的变量value
就是设置属性时的值

value 隐式参数,用于设置拜访器以及增加或移除事件处理程序。

对类的属性进行 设置
比方用类名.属性=“”赋值 set作用
变量=类名.属性 取值 get 作用