成员属性
用于保护成员变量
为成员属性的获取和赋值添加逻辑处理
解决了private
public
protected
的局限性
属性可以让成员变量在外部只能获取不能修改或者只能修改不能获取
成员属性的基本语法
//访问修饰符 属性类型 属性名
//{
// get{}
// set{}
//}
class Person
{
private string name;
public int money;
public bool gender
//属性的命名一般用帕斯卡命名法
public string Name
{
get
{
//可以在return之前添加一些逻辑规则
//get中意味着这个属性可以获取的内容
return name;
}
set
{
//value用于表示外部传入的值
name=value;
}
}
public int Money//成员属性添加逻辑和保护成员变量
{
get
{
//解密
return money-5;
}
set
{
//加密
money=value+5;
}
}
//当set和get只有一个时,一般只会有get
public bool Gender
{
get
{
return gender;
}
}
}
成员属性的使用
Person p = new Person();
p.Name = "Robot";//使用Name中的set语句块
Console.WriteLine(p.Name);//使用Name中的get语句块
成员属性中get
和set
前可以加访问修饰符
不加的话会默认使用属性申明时的访问权限
加的访问修饰符要低于属性的访问权限
不能让get
和set
的访问权限都低于属性的权限
get
和set
可以只有一个,只有一个时没有必要在前面加访问修饰符
自动属性
外部能得到却不能更改的特征
如果类中有一个特征是只希望外部能得到而不能更改,又没有什么特殊处理,那么就可以直接使用自动属性
public float Height
{
//get和set中没有写逻辑的需求
get;
private set;
}
习题
namespace 成员属性
{
class Student
{
public string Name
{
get; set;
}
public int age;
public int score;
//这道题甚至不用写构造函数
public void Speak()
{
Console.WriteLine("我是{0},今年{1}岁了",Name,age);
}
public void ScoreCalc()
{
Console.WriteLine(score);
}
public int Age
{
get
{
//get是外面得到这个变量
return age;
}
set
{
//所以要在定义的时候有判断的话要在set里面写逻辑
if (value < 0)
{
age = 0;
}
else if (value > 150)
{
age = 150;
}
else
{
age = value;
}
}
}
public int Score
{
get
{
return score;
}
set
{
if (value < 0)
{
score = 0;
}
else if (value > 100)
{
score = 100;
}
else
{
score=value;
}
}
}
}
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
Student student1 = new Student();
student1.Name = "robot";
student1.Age = 20;
student1.Score = 50;
student1.ScoreCalc();
student1.Speak();
}
}
}