C#成员类型的可修饰及默认修饰符如下:
| 成员类型 | 默认修饰符 | 可被修饰 |
| :-: | :-: | :-: |
| enum | public | none |
| class | private | public、protected、internal、private、
protected internal |
| interface | public | none |
| struct | private | public、internal、private |
public 访问级别最高
private 访问级别最低
2、this 关键字
看以下代码,有什么问题:
class Strdent
{
private string _name; //姓名
public int _age = 19; //年龄
public string _cardID = “145236985674526685”; //身份证号码
public void SetName(string _name)
{
_name = _name;
}
}
分析: 在 Student 类中定义了一个 private 成员变量 _name,在 SetName()方法的参数中也定义了一个与之同名的变量 _name。这时编译器会发现成员变量和方法的参数重名了。
此时,编译器无法分辨代码中出现的这两个 _name 那个是成员变量,哪个是方法中的参数。我们可以借助 this 关键字来解决这个问题。
this 关键字是指当前对象本身。通过 this 可以引用当前类的成员变量和方法。
因此可以改变以上代码为:
class Strdent
{
private string _name; //姓名
public int _age = 19; //年龄
public string _cardID = “145236985674526685”; //身份证号码
public void SetName(string _name)
{
this._name = _name;
}
}
使用 this 关键字可以解决成员变量和局部变量名称冲突的问题。
3、C#属性
3.1、用方法保证数据安全
在 Student 类定义的基础上,编写创建一个 Strdent 类的实例 student,并重新对该对象的年龄 _age 进行赋值。
Student student = new Student();
student._age = -2;
student._cardID = “1433223”;
student.SetName(“王丽丽”);
student.Say(); //打印方法
程序运行之后学员对象 student 的年龄变成了“-2”,身份证号码也被随意改为“1433223”。
这种随意修改对象公有变量的赋值是不符合逻辑的。
我们可以通过类方法来解决这个问题。可以定义一个带参数的方法来实现
实现思路:把控制台输入的年龄作为这个方法的参数传递到方法中,在方法中使用 if 结构对年龄的取值进行判断。如下
///学员类
class Student
{
private string _name; //姓名
private int _age; //年龄
public string ——cardID; //身份证号
//set - get 方法
public int GetAge()
{
return this._age;
}
public void SetAge(int age)
{
// if 结构对年龄的取值进行判断
if(age < 0 || age > 100)
{
this._age = 19;
}
else
{
this._age = age;
}
}
}
///测试类
class Program
{
static void Main(string[] args)
{
Student student = new Student();
student.SetAge(-10);
Console.WriteLine(“年龄是:{0}”,student.GetAge());
student.SetAge(25);