学习 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 作用