c# get和set的用法(附带实例)
C# 程序语言提供了属性(property)成员的概念,所谓的属性就是一个机制,可以读取并写入类私有字段的值。在这个机制下,可以使用 set 设定 private 字段变量,使用 get 取得字段变量,
set 和 get 的语法格式如下:
还可以将表达式主体方法应用到属性中,重新设计第 1 个实例,读者需留意第 10~11行:
程序中可以看到 get 和 set,我们可以使用自动实操属性的概念来省略字段变量的声明,以及 get 和 set 内容。例如:
程序设计时也可以用表达式主体自动为属性设定初始值,可以参考下列实例。
其实从 C# 3.0 开始就有提供对象初始化(Object initializer syntax)的概念了,这个概念可以用于在实体化类对象时同时设定属性的初始值。
例如:
在使用 set 创建属性时,也可以增加 if 条件设定,详情可以参考下列实例。
例如,创建 Job 类,这个程序会要求 Name 属性内容必须大于 3 个字母,如果不符合规定,则定义 Name 是“NA”。
set 和 get 的语法格式如下:
public 数据类型 属性名称 { get { return 数据字段; } set { 数据字段 = value; } }
例如:属性名称第一个英文字母建议大写。
Bank A = new Bank(); A.Balance = 1000; Console.WriteLine(A.Balance); public class Bank { private int _balance; // 默认的也是 private,所以也可以省略 private public int Balance // 定义 Balance 属性 { get { return _balance; } set { _balance = value; } } }执行结果为:
1000
上述第 2 行有 A.Balance=1000; 因为有等号会触发 Balance 属性的 set() 方法。第 3 行的 A.Balance,没有等号会触发 Balance 属性的 get() 方法。还可以将表达式主体方法应用到属性中,重新设计第 1 个实例,读者需留意第 10~11行:
Bank A = new Bank(); A.Balance = 1000; Console.WriteLine(A.Balance); public class Bank { private int _balance; // 预设也是 private,所以也可以省略 private public int Balance // 定义 Balance 属性 (property) { get => _balance; set => _balance = value; } }执行结果和第 1 个实例相同。
程序中可以看到 get 和 set,我们可以使用自动实操属性的概念来省略字段变量的声明,以及 get 和 set 内容。例如:
Bank A = new Bank(); A.Balance = 1000; Console.WriteLine(A.Balance); public class Bank { public int Balance // 定义 Balance 属性 (property) { get; set; } }执行结果和前面实例相同。上述类没有成员字段,程序编译时会由编译程序自动产生私有成员字段。
程序设计时也可以用表达式主体自动为属性设定初始值,可以参考下列实例。
Student A = new Student(); A.PrintInfo(); A.Score = 80; A.Name = "Jiin-Kwei"; A.PrintInfo(); public class Student { public int Score { get; set; } = 60; public string Name { get; set; } = "Hung"; public void PrintInfo() => Console.WriteLine($"{Name} : {Score}"); }执行结果为:
Hung : 60
Jiin-Kwei : 80
其实从 C# 3.0 开始就有提供对象初始化(Object initializer syntax)的概念了,这个概念可以用于在实体化类对象时同时设定属性的初始值。
例如:
Student A = new Student() { Score = 60, Name = "Jiin-Kwei" }; A.PrintInfo(); public class Student { public int Score { get; set; } public string Name { get; set; } public void PrintInfo() => Console.WriteLine($"{Name} : {Score}"); }执行结果为:
Jiin-Kwei : 60
在使用 set 创建属性时,也可以增加 if 条件设定,详情可以参考下列实例。
例如,创建 Job 类,这个程序会要求 Name 属性内容必须大于 3 个字母,如果不符合规定,则定义 Name 是“NA”。
Job A = new Job(); A.Name = "JK Hung"; A.Occupation = "老师"; A.PrintInfo(); Job B = new Job(); B.Name = "JK"; B.Occupation = "教授"; B.PrintInfo(); class Job { private string _name; private string _occupation; public string Name { get { return _name; } set { //Console.WriteLine(value); if (value.Length > 3) _name = value; else _name = "NA"; } } public string Occupation { get { return _occupation; } set { _occupation = value; } } public void PrintInfo() { Console.WriteLine($"{Name} 是 {Occupation}"); } }执行结果为:
JK Hung 是 老师
NA 是 教授