上一篇: C# 反射(Reflection)

下一篇: C# 索引器(Indexer)

C# 属性(Property)

在本教程中,我们将学习C#属性(Property)的基本概念及其应用。

  1. 属性简介
  2. 定义属性
  3. 自动生成属性
  4. 索引器属性
  5. 表达式属性

属性简介

属性(Property)是一种访问类或结构体成员变量的特殊方法,用于封装该成员变量的访问逻辑。使用属性可以提供更好的封装和数据验证,并隐藏内部实现细节。

定义属性

属性由 getset访问器组成,用于读取和写入成员变量。以下代码演示了如何定义一个简单的属性:

                public class MyClass
                {
                    private int _myField;

                    public int MyProperty
                    {
                        get { return _myField; }
                        set { _myField = value; }
                    }
                }
                

在这个例子中,MyProperty属性用于访问私有字段 _myField。可以为 getset访问器设置不同的访问级别。例如,如果想创建一个只读属性,只需省略 set访问器:

                public int MyReadOnlyProperty
                {
                    get { return _myField; }
                }
                

自动生成属性

自动生成属性(Auto-Implemented Property)是C#提供的一种简化属性定义的方式。在这种情况下,不需要显式声明私有字段,编译器会自动为您生成一个。

                public int MyProperty { get; set; }
                

也可以为自动生成属性设置访问级别:

                public int MyReadOnlyProperty { get; private set; }
                

索引器属性

索引器属性允许您使用数组索引语法访问对象。要定义索引器属性,请使用 this关键字并提供一个索引参数。

                public class MyClass
                {
                    private int[] _myArray = new int[10];

                    public int this[int index]
                    {
                        get { return _myArray[index]; }
                        set { _myArray[index] = value; }
                    }
                }
                

使用示例:

                MyClass obj = new MyClass();
                obj[0] = 42;
                Console.WriteLine(obj[0]); // 输出 "42"
                

表达式属性

表达式属性是C# 6.0中引入的一种简化属性定义的方式。它们只能具有 get访问器,并使用箭头函数(=>)直接返回一个值。

                public class MyClass
                {
                    public int MyField { get; set; }

                    public int MyExpressionProperty => MyField * 2;
                }
                

本教程简要介绍了C#属性的基本概念及其应用。通过学习和实践,您将更好地理解并掌握C#属性的使用方法。属性是面向对象编程中的一种强大工具,可以提高代码的封装性和可维护性。