使用 C# 学习面向对象编程:第 3 部分

C# 类属性

在第 2 部分中,我们仅描述了对类的属性的基本理解。 在本课中,我们将详细讨论各种类型的属性。

属性类型

以下是属性的类型。

  • 只读属性。
  • 只写属性。
  • 自动实现的属性。

只读属性

使用一种简单的技巧,我们可以通过在属性实现中定义 get 访问器来应用只读属性。

例子

复制代码
using System;

namespace Readonlyproperties
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Car 类的一个实例
            Car SportCar = new Car();

            // 使用只读属性获取 Car 实例的信息并打印到控制台
            Console.WriteLine("Model: {0}", SportCar.Model_ID);
            Console.WriteLine("Maker: {0}", SportCar.Maker_Name);

            // 等待用户按下任意键继续执行程序
            Console.ReadKey();
        }

        // Car 类的定义
        public class Car
        {
            // 私有字段,表示车型年份
            private int model = 2012;

            // 私有字段,表示车辆制造商
            private string maker = "mercedes";

            // 只读属性,用于获取车型年份
            public int Model_ID
            {
                get
                {
                    return model;
                }
            }

            // 只读属性,用于获取车辆制造商
            public string Maker_Name
            {
                get
                {
                    return maker;
                }
            }
        }
    }
}
  • 在上面的例子中,我们创建了具有两个只读属性 Model_ID 和 Maker_Name 的 Car 类。您可以说每个属性都是只读的,因为它们只需要获取访问器。我们在定义变量时为型号和制造商分配值。在本例中,值为 2012 和"Mercedes"。

  • Readonlyproperties 类的 Main 方法实例化一个名为 SportCar 的新 Car 对象。SportCar 的实例化使用 Car 类的默认构造函数。

  • 由于 Car 类的 model 和 maker 属性是只读的,如果您在示例中插入 SportCar.Model_ID = 2013,程序将生成错误并且无法编译,因为 Model_ID 是只读的;Maker_Name 也是如此。当在 Console.WriteLine 中使用 Model_ID 和 Maker_Name 属性时,可以正常工作。这是因为这些是读取操作,仅调用 Model_ID 和 Maker_Name 属性的 get 访问器。

只写属性

我们已经讨论了只读属性。现在我们将讨论只写属性;只读属性和只写属性之间几乎没有区别。只写属性只有一个 set 访问器。

例子

复制代码
using System;

namespace WriteOnlyProperty
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Car 类的实例
            Car SportsCar = new Car();

            // 设置 Car 类的 _model 属性
            SportsCar._model = 2013;

            // 设置 Car 类的 _maker 属性
            SportsCar._maker = "lamborghini";

            // 显示汽车数据
            SportsCar.DisplayCustomerData();

            // 等待用户按下任意键继续执行程序
            Console.ReadKey();
        }

        // Car 类的定义
        public class Car
        {
            // 私有字段,表示车型年份
            private int model = -1;

            // 写入属性,用于设置车型年份
            public int _model
            {
                set
                {
                    model = value;
                }
            }

            // 私有字段,表示车辆制造商
            private string maker = string.Empty;

            // 写入属性,用于设置车辆制造商
            public string _maker
            {
                set
                {
                    maker = value;
                }
            }

            // 方法,用于显示客户数据
            public void DisplayCustomerData()
            {
                Console.WriteLine("Model: {0}", model);
                Console.WriteLine("Maker: {0}", maker);
            }
        }
    }
}
  • 在上面的例子中,我们创建了具有两个只写属性 Model_ID 和 Maker_Name 的 Car 类。您可以说每个属性都是只写的,因为它们只有 set 访问器。使用 set 属性,我们为型号和制造商分配了值。在本例中,值为 2013 和"Lamborghini"。

  • WriteOnlyProperty 类的 Main 方法实例化一个名为 SportCar 的新 Car 对象。SportCar 的实例化使用 Car 类的默认构造函数。

  • 由于 Car 类的 model 和 maker 属性是只写的,如果您在示例中插入 Console.WriteLine (SportCar. Model_ID),程序将生成错误并且无法编译,因为 Model_ID 是只写的;Maker_Name 也是如此。当在 SportCar.Model_ID =2012 中使用 Model_ID 和 Maker_Name 属性时,它们可以正常工作。这是因为这些是仅调用 Model_ID 和 Maker_Name 属性的 set 访问器的写入操作。

自动实施的属性

C# 3.0 引入了一个新的类属性,称为自动实现的属性,它创建无需 get 和 set 访问器实现的属性。

例子

复制代码
using System;

namespace AutoImplementedproperty
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 car 类的实例
            car SportCar = new car();

            // 设置 car 类的 model 属性
            SportCar.model = 2014;

            // 设置 car 类的 maker 属性
            SportCar.maker = "ferrari";

            // 显示汽车数据
            Console.WriteLine("Model: {0}", SportCar.model);
            Console.WriteLine("Maker: {0}", SportCar.maker);

            // 等待用户按下任意键继续执行程序
            Console.ReadKey();
        }

        // car 类的定义
        public class car
        {
            // 自动实现属性,表示车型年份
            public int model { get; set; }

            // 自动实现属性,表示车辆制造商
            public string maker { get; set; }
        }
    }
}

请注意,此示例中的 get 和 set 访问器没有实现。在自动实现的属性中,C# 编译器在后台执行传统属性。主要方法使用我们之前讨论过的自动实现属性中的相同传统属性。

相关推荐
csdn_aspnet9 小时前
C# 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·算法·c#
武藤一雄14 小时前
C# 设计模式大全(第一弹|7种)
microsoft·设计模式·微软·c#·.net·.netcore
格林威15 小时前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
向上的车轮15 小时前
熟悉C#如何转TypeScript——SDK与包引用
开发语言·typescript·c#
CSharp精选营17 小时前
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
c#·资源泄漏
unicrom_深圳市由你创科技18 小时前
LabVIEW和C#在工业控制中的应用差异是什么?
fpga开发·c#·labview
唐青枫19 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net
DowneyJoy20 小时前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
格林威20 小时前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
DowneyJoy20 小时前
【Unity3D补充知识点】常用数据结构分析-数组(Array)
数据结构·unity·c#