C#学习笔记(1)

属性访问器(accessors)

作为一个只学了一年java的萌新,在刚刚接触到C#中的属性访问器时,我感觉到了C#语言设计的人性化,举个栗子:

当使用java封装属性时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Person {
private String name;
private String ID;

public void setName(String name) {
this.name = name;
}
public void setID(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public String getID() {
return this.id;
}
}

C#使用属性访问器:

1
2
3
4
5
6
7
8
9
10
class Student
{
private string name;

private string ID;

public String Name { get; set; }

public String ID { get; set; }
}

封装作为面向对象三大特点之一,好处就体现在不暴露出数据具体的位置而只暴露出数据的接口,通过接口来约束数据的获取以及赋值时的规范,大大增加了数据安全性;

1
2
3
4
5
6
7
8
9
10
11
class Student
{
private string name;

private string ID;

public String Name { get; set { if (name == null || name.Length == 0) return;} }
// 赋值name时字符串不能为空

public String ID { get; set; }
}

同时,C#中的属性访问器还支持简单的写法:

1
2
3
4
5
6
7
8
9
10
class StudentOne
{
private string name;

private string ID;

public String Name { get; set; }

public String ID { get; set; }
}
1
2
3
4
5
6
class StudentTwo
{
public String Name { get; set; }

public String ID { get; set; }
}

比如说这上面两个写法是等效的,下面的写法实际上也会创建一个私有字段:

1
2
3
4
5
6
7
8
9
10
class Program
{
public static void Main(string[] args)
{
Person person = new Person();
Console.WriteLine(person.Name);
person.Name = "阿巴阿巴";
Console.WriteLine(person.Name);
}
}
1
2
3
4
5
public class Person
{
private string name = "诶嘿诶嘿";
public string Name { get { return name; } set { name = value; } }
}

image-20220214155704901

1
2
3
4
public class Person
{
public string Name { get; set; } = "诶嘿诶嘿";
}

image-20220214155841440并没有什么区别呢)

ref和out参数