属性

C# 中的属性(Property)是类和结构体中用于封装数据的成员。它们提供了一种方式来定义类成员的访问和设置规则,通常用于隐藏字段(Fields)的内部实现细节,同时提供控制数据访问的机制。

属性可以看作是对字段的包装器,通常由 get 和 set 访问器组成。

举例:在这里我们我们定义一个Student类,里面包含公有字段name、age,还有私有字段id。

internal class Student
{
    public string name;
    public int age;
    private int id;
}

在Main方法里公有字段是可以正常访问的,而私有字段没有访问权限无法访问。

static void Main(string[] args)
{
    Student stu=new Student();
    stu.name = "李四";    //公有字段可以正常访问

    //stu.id=123456;    访问私有数据是没有权限的

    

}

我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。

属性的定义

1.定义属性需要名字和返回值
2.属性分为两块  get块(获取)    set块(设置)
3.访问属性和访问字段是一样的


定义一个可以访问和设置私有字段的属性ID:

internal class Student
{
    public string name;
    public int age;
    private int id;
    //定义属性
    //使用属性也可以访问和设置带有权限的数据字段
    public int ID 
    {
        get 
        {
        return id;
        }
        //=值    就是由value来代替的
        set 
        {
        id=value;
        }
    
    }
}

在Main函数中访问和设置属性:

           //使用属性
          //通过属性设置或访问数据   使用的时候把它当作一个普通的数据成员一样使用,并不是函数调用
            stu.ID = 123456;//设置    =值 调用set
            //访问    直接对象名.属性名
            Console.WriteLine(stu.ID);

定义只读属性:

    //只读
    public int Age
    {
        get 
        {
            return age;
        }
    
    }

使用只读属性:只读属性只能访问,不能设置。

//stu.Age=10;报错原因:Age属性是只读属性
Console.WriteLine(stu.Age);

定义只写属性:

//只写
public int Age1 
{
    set {
        Age1=value;
    }
}

使用只写属性:只写属性不能访问,只能设置。

stu.Age1 = 10;
//Console.WriteLine(stu.Age1);报错原因:只写属性

简化属性创建

在Student类中定义一个私有字段addres,再定义可以在外部访问和设置它的属性Addres。

private string addres;
public string Addres { get => addres; set => addres = value; }

以上方式写法比较复杂,C#提供了一种语法,可以简化属性写法:

public string Addres { get; set; }//即代表字段又代表属性

在这种情况下,编译器会自动为 Addres属性生成一个私有的匿名字段来存储值。

在Main函数中使用Addres属性:

 stu.Addres = "河南省";
 Console.WriteLine(stu.Addres);

注意:属性是可以在创建时初始化赋值的:

public string phone { get; set; } = "15151515";//15151515就是phone的默认值

在Main函数中使用访问属性:

Console.WriteLine(stu.phone);//输出结果为:15151515

以下是属性的实例:

class Dog
{
    public string Name { get; set; }

    private int age;
    public int Age { get => age; set => age = value; }
    public Dog(string Name)//构建函数传出名字参数
    {
        this.Name = Name;
    }

    public enum Ecolor  //定义枚举限制颜色属性的数据范围
    {
        白, 黑, 黄, 灰, 花
    }
    //public Ecolor color;

    //public Ecolor Color
    //{
    //    get
    //    {
    //       return color;
    //    }
    //    set
    //    {
    //        color = value;
    //    }
    //}
    //同上 
    public Ecolor Color { get; set; }//定义颜色属性

}

在Main函数中使用访问属性:

Dog dog = new Dog("阿黄");
//dog.Name = "阿黄";
Console.WriteLine(dog.Name);
dog.Color = Dog.Ecolor.黑;

Console.WriteLine(dog.Color);
dog.Color = Dog.Ecolor.黄;

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐