首页 > 编程笔记 > C#笔记 阅读:51

c# get和set的用法(附带实例)

C# 程序语言提供了属性(property)成员的概念,所谓的属性就是一个机制,可以读取并写入类私有字段的值。在这个机制下,可以使用 set 设定 private 字段变量,使用 get 取得字段变量,

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

上述第 2 行没有设定属性,此时使用自动设定的初始值输出。第 5 行则使用第 3~4 行所设定的属性输出。

其实从 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 是 教授

相关文章