编辑
2026-06-18
编程语言
00
请注意,本文编写于 40 天前,最后修改于 25 天前,其中某些信息可能已经过时。

目录

成员属性
基本概念:
基本语法:
成员属性的使用:
get,set前可以加访问修饰符:
get和setk可以只加一个:
自动属性:
练习

成员属性

基本概念:

前情回顾:

image.png 成员属性: image.png

基本语法:

访问修饰符 属性类型 属性名 { get{}; set{}; }

举个例子:

class Person { private int age; private string name; private bool sex;//三个我都用private修饰,外部不能访问. public string Name { get { //意味着这个属性可以获取的内容. //可以在返回之前添加一些逻辑规则. return name; //通过属性Name,我就可以访问成员变量name, } set { //可以在设置之前添加一些逻辑规则. name = value;//value关键字表示外部传入的值 } } }

成员属性的使用:

image.png

因为我让属性前面的修饰符是,private,所以外面没法访问, 但却可以通过Name属性,来访问变量name.

static void Main(string[] args) { Person p = new Person(); p.Name = "leemoon";//这句是在执行成员属性Name里面的set语句块 Console.WriteLine(p.Name);//这句则是在使用get语句块 }

除此之外还能用来加密解密

class Person { private int money; private string name; private bool sex;//三个我都用private修饰,外部不能访问. public int Money { get { //解密 return money-5; } set { //加密 money = value+5; } } } internal class Program { static void Main(string[] args) { Person p = new Person(); p.Money = 1000;//我存进去的是1000,实际在堆里存的是1005 Console.WriteLine(p.Money);//解密出来之后又是1000. } }

get,set前可以加访问修饰符:

image.png

public int Money { get { return money-5; } set { money = value+5; }

get,set默认前面的修饰符是public int Money 的public一样的.

当然也可以一个是public,一个是private,

当声明属性的访问修饰符是private也就是private int Money , get和set的的访问修饰符就不能是public,因为public是比private更高级的.

里面的权限一定要低于外面的权限.

但不能两个都是private,因为这样public int Money的public就没用了

get和setk可以只加一个:

image.png

class Person { private int money; private string name; private bool sex; public bool Sex { get { return sex; } } }

在调用我们一般只希望能得到这个数据,而不让去改他,所以只用get,就像这样

static void Main(string[] args) { Person p = new Person(); Console.WriteLine(p.Sex); }

就可以保护成员变量.

当然我也可以只改他

class Person { private int money; private string name; private bool sex; public bool Sex { set { sex = value; } } }

在调用就:

static void Main(string[] args) { Person p = new Person(); value = false; }但一般很少会,去改,而不得到它

自动属性:

image.png

class Person { private int money; private string name; private bool sex; public int Hight { get; set; } }

get和set没有任何的语句块,你可以把Hight看成一个特殊的成员变量,

在你写这个语句,把Name当成一个变量时
public string Name { get; set; }

它其实会自己变成

private string _name; public string Name { get { return _name; } set { _name = value; } }

所以当我我们不用写逻辑的时候就可以直接不写变量,而是用属性当一个特殊变量;

用属性替代成员变量,起到能得不能改或者能改不能得,就像这样:

public int Hight { get; private set; } static void Main(string[] args) { Person p = new Person(); Console.WriteLine(p.Hight); }

练习

题目: image.png

using System; namespace 属性练习2 { class Employee { public string Name { get; set; } private string department; // 修正拼写 private int age; private int baseSalary; private int bonus; public int Age { get { return age; } set { if (value >= 18 && value <= 65) { age = value; } else { age = 18; // 超出范围设为默认值 } } } public int Bonus { get { return bonus; } set { if (value >= 0 && value <= 100000) { bonus = value; } else { bonus = 50000; } } } public int BaseSalary { get { return baseSalary; } set { if (value >= 0 && value <= 100000) { baseSalary = value; } else { baseSalary = 50000; } } } public string Department { get { return department; } set { // 关键修正:将 && 改为 || if (value == "研发部" || value == "市场部") { department = value; } else { department = "研发部"; } } } public void Introduction() { // 微调:去掉了多余的“部门”二字 Console.WriteLine($"大家好,我是{Name},年龄{Age},是{Department}的员工"); } public void Calculation() { int total = BaseSalary + Bonus; double avg = total / 2.0; // 使用 double 保证平均数精度 Console.WriteLine($"总工资: {total}, 平均是: {avg}"); } } internal class Program { static void Main(string[] args) { // 测试 1:合法数据测试(测试“市场部”是否能设置成功) Employee p1 = new Employee(); p1.Name = "leemoon"; p1.BaseSalary = 80000; p1.Bonus = 70000; p1.Age = 23; p1.Department = "市场部"; p1.Introduction(); p1.Calculation(); Console.WriteLine("-----------------------------------"); // 测试 2:非法数据过滤测试 Employee p2 = new Employee(); p2.Name = "jack"; p2.BaseSalary = 800002342; // 越界,自动变为 50000 p2.Bonus = -70000434; // 越界,自动变为 50000 p2.Age = 230; // 越界,自动变为 18 p2.Department = "保洁部"; // 不合法部门,自动变为 研发部 p2.Introduction(); p2.Calculation(); } } }

本文作者:Leemoon

本文链接:

版权声明:leemoon