LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

掌握C#中的get和set访问器:实现属性封装与数据验证

admin
2024年3月19日 11:20 本文热度 593

在C#中,getset访问器是属性(Property)的重要组成部分,它们分别用于读取和设置属性的值。通过使用getset访问器,我们可以控制对属性值的访问,实现数据的封装和验证。

一、属性的基本结构

在C#中,属性通常是一个特殊的成员,它提供了对字段或数据的访问。一个属性由两部分组成:get访问器和set访问器。

public class Person
{
    private string _name; // 私有字段

    // 属性定义
    public string Name
    {
        get // get访问器,用于读取_name字段的值
        {
            return _name;
        }
        set // set访问器,用于设置_name字段的值
        {
            _name = value// value是set访问器的隐式参数,表示要设置的新值
        }
    }
}

二、只读和只写属性

getset访问器不是必须的,我们可以根据需要只定义一个。如果只有get访问器,则属性是只读的;如果只有set访问器,则属性是只写的。

public class ReadOnlyPerson
{
    private string _name;

    // 只读属性
    public string Name
    {
        get
        {
            return _name;
        }
    }
}

public class WriteOnlyPerson
{
    private string _name;

    // 只写属性
    public string Name
    {
        set
        {
            _name = value;
        }
    }
}

三、数据验证

set访问器是执行数据验证的理想位置。我们可以在设置属性值之前检查其有效性,并据此决定是否允许设置。

public class ValidatedPerson
{
    private string _name;

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (!string.IsNullOrWhiteSpace(value) && value.Length <= 50)
            {
                _name = value;
            }
            else
            {
                throw new ArgumentException("Name must be a non-empty string with a maximum length of 50 characters.");
            }
        }
    }
}

四、自动实现的属性

在C#中,如果属性不需要额外的逻辑,我们可以使用自动实现的属性,这样编译器会自动为我们创建私有的后备字段。

public class AutoImplementedPerson
{
    // 自动实现的属性
    public string Name { getset; }
}

五、例子代码

下面是一个简单的例子,演示了如何使用getset访问器封装一个Person类的属性,并在设置属性值时执行验证。

using System;

public class Person
{
    private string _name;
    private int _age;

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (!string.IsNullOrWhiteSpace(value))
            {
                _name = value;
            }
            else
            {
                throw new ArgumentException("Name cannot be null or whitespace.");
            }
        }
    }

    public int Age
    {
        get
        {
            return _age;
        }
        set
        {
            if (value >= 0)
            {
                _age = value;
            }
            else
            {
                throw new ArgumentException("Age cannot be negative.");
            }
        }
    }

    public void DisplayDetails()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();

        try
        {
            person.Name = "Alice";
            person.Age = 25;
            person.DisplayDetails();

            person.Age = -1// 这将抛出异常,因为年龄不能为负
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

在这个例子中,Person类有两个属性:Name和`


该文章在 2024/3/19 11:20:01 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved