C# 属性 详解

1.1声明属性

使用场景:通常用于需要对字段进行额外逻辑处理的情况。

属性使用三个上下文关键字,get取值(读取属性的值)、set赋值(设置属性的值)、value赋值数据(表示传入的值)

只读属性:只有get访问器,无法从外部修改;

只写属性:只有set访问器,无法从外部读取。

例子:

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

    // 完整属性
    public string Name
    {
        get { return name; } // 读取字段值
        set
        {
            if (string.IsNullOrEmpty(value))
            {
                throw new ArgumentException("Name cannot be null or empty.");
            }
            name = value; // 设置字段值
        }
    }

    // 简略属性
    public int Age { get; set; }

    // 只读属性
    public string Greeting => $"Hello, {Name}!";

    // 只写属性
    private string secret;
    public string Secret
    {
        set { secret = value; }
    }
}

1.2自动实现的属性

允许在声明属性时不添加取值或赋值方法,也不声明任何支持字段,一切都自动实现。

自动实现的属性简化了写法,也使代码更易读。

例子:

public string Name { get; set; }

1.3属性和字段的设计规范

属性和方法都可以对字段进行赋值和取值。

一般原则是 方法代表行动,而属性代表数据。

属性:使用PascalCase大小写规范写法。

字段:避免使用PascalCase大小写规范写法。

1.4提供属性验证

作用: 用于确保属性值符合特定的规则或约束。

在属性验证中,赋值无效值时,可以抛出异常,抛出异常时,要传递参数"value"。它是属性赋值方法隐含的参数名。

验证特性:除了[Required],还有其他常用的验证特性,如[StringLength][Range][RegularExpression]等,用于定义更复杂的验证规则。

1.5只读和只写属性

可移除属性的取值方法或赋值方法来改变属性的可访问性。

只写的情况比较罕见。只读比较常见。

除非字段和属性类型不匹配的情况下,其他时候都应该使用只读自动实现属性。

1.6取值和赋值方法的访问修饰符

C#2.0允许在属性的实现中为get或set部分指定访问修饰符(但不能为两者都指定)从而覆盖为声明属性指定的访问修饰符。

更常见的作法,是将set设置为 私有的,get设置为公有的。

例子:

class Data
{
    public string Data{ get; private set;}="datavalue";
}

1.7属性和方法调用 不允许作为 ref 或 out 参数值

ref或out参数内部要将内存地址传给目标方法。但属性可能是无支持字段的虚字段。也可能是只读或只写,所以不可能传递存储地址。必须使用临时参数,最后用完再进行赋值。

你可能感兴趣的:(c#,java,开发语言)