C# 属性 示例分解

在本篇文章中,我们会看到如何在示例中使用C#属性。

C#中属性是什么?

C#中,属性是字段的扩展,当隐蔽实现细节的时候,属性允许类读、写、关闭私有字段。

在C#中,属性其实是一种专有的getter和setter函数方法,此函数封装了一个私有变量。get属性访问器用于返回数值,set访问器用于分配新值。简单来说,属性是用来从类中的私有字段get和set数据。

( get : 返回  set : 分配)  

C# 属性语法

下面是属性定义的模板

 

 1 <Access Modifier> <Return Type> <Property Name>
 2   {
 3    get { 
 4          // get accessor
 5          // return value
 6        }
 7  
 8     set {
 9           // set accessor
10           // assign a new value
11          }
12   }

 

从上面的范例模板可以看到,当我们从属性中读取数值时,get访问块执行这些语句;相似地 ,当我们分配数值给属性的时候,set访问块执行。

 下面看一下属性定义的实例:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Drawing;
 6 using System.Windows.Forms;
 7 
 8 namespace PropertyDemo
 9 {
10     class Employee
11     {
12         //私有字段
13         private string name;
14 
15         //公共属性访问私有字段
16         public string Name
17         {
18             get { return name; }
19             set { name = value; }
20         }
21         public Employee(string name)
22         {
23             this.name = name;
24         }
25     }
26     public class Programs
27     {
28         static void Main(string[] args)
29         {
30             //构造函数
31             Employee employee = new Employee("Shekh Ali");
32             //调用Name属性的get语句块
33             string XM = employee.Name;
34             Console.WriteLine("Name is:{0}",XM);
35 
36             //调用Name属性的set语句块
37             employee.Name = "Mark Adams";
38             Console.WriteLine("Name is :{0}",employee.Name);
39 
40             //从此例可以看出,programs类中无法再访问name私有字段,只有访问Name属性;
41         }
42     }
43 }

从上面 的示例可以看出,通过访问公共的属性我们可以看到私有字段name现在显露出来了。如果我们想要读取name字段的值,我们必须用employee的实例对象来调用Name属性。类似地,如果我们想要设置name字段的新值,我们必须要调用Name属性的set词句块。

get访问器和set访问器不仅限于读取或写入值到属性里面,而且允许我们在set或get语句块中做非常复杂的运算或业务逻辑。

 1 public string Name
 2         {
 3           get {
 4                 if (string.IsNullOrEmpty(name))
 5                 { 
 6                     // Business Logic
 7                     name = "Name is not available !";
 8                 }
 9                 return name;
10                }
11  
12           set {
13                 name = value;
14               }
15          }

 C# 只读属性

只有get访问器而没有set访问器的属性称为只读属性。

只读属性允许我们只读取私有字段的值。

 1 class Employee
 2    {
 3        private string name;
 4  
 5        // ReadOnly Property     
 6        public string Name
 7        {
 8          get {        
 9                return name;
10              }
11        }
12        // Constructor
13        public Employee(string name)
14        {
15            this.name = name;
16        }
17    }
18    public class Programs
19    {
20            
21        public static void Main(string[] args)
22        {
23            Employee employee = new Employee("Shekh Ali"); // Constructor
24            string name = employee.Name; // Calling get block of the ReadOnly property
25  
26            Console.WriteLine($"Name : {name}");
27            employee.Name = "Mark Adams"; // Calling set block to assign the new value.
28            Console.WriteLine($"Name : {employee.Name}");
29  
30            Console.ReadLine();         
31        }
32  
33    }

 

 从上面 的示例中可以看出,当我们试图在构造函数之外尝试设置属性值的时候,程序会抛出错误信息。

C# 只写属性

类似地,正如我们已经创建的只读属性那样,我们也能创建只写属性。只写属性只有set语句块,没有get语句块;它允许我们只能设置值,而不能读取值。

如果我们尝试读取值,程序会抛出一个错误信息。

1 private string name;
2 // WriteOnly Property     
3 public string Name
4 {
5   set {        
6         name =value;
7       }
8 }

在C#中,自动实现的属性同时包含get访问器和set访问器,而没有任何业务逻辑。

它使代码更加清晰易读,并且在get或set块中不需要额外的业务逻辑或计算时使用。

1 // Auto Implemented Property  
2    
3    public string Name { get; set; }

对于自动实现的属性,编译器会在内部创建私有字段,这些属性只能通过属性的getter或setter访问。

 

 

 C# 静态属性

在C#中,用static关键字标记的属性称为static属性。

posted @ 2022-05-01 22:34  chenlight  阅读(226)  评论(0编辑  收藏  举报