• C#基本语法学习(三)


    1、C#属性,用如下代码定义一个属性:

    1         private string name;
    2         public string Name
    3         {
    4             get { return name; }
    5             set { name = value; }
    6         }

      第1行定义了一个变量,这是属性所依赖的基础变量。2-6行代码定义了一个Name属性,类的使用者可以通过Name属性对类中的基础变量进行读取和修改。如:

    1 Student student = new Student();
    2 
    3 student.Name = "Nick";

      在属性的使用者看来,属性就像类里面有一个具有public访问权限的变量,但事实情况并非如此。前面代码中定义的Name属性其实定义了两个特殊方法,GetName和SetName方法,分别用来读取和修改类中的私有变量Name。

      第4行代码称为属性的读取读取方法(getter)。属性的读取方法必须返回与属性相同的类型。当有代码读取属性时,读方法就被调用,并且将返回值交给调用属性的代码。

      第6行代码是属性的设置方法(setter),设置方法接受一个与属性类型相同的入口参数,并且在C#中规定这个入口参数名称为value,所以在属性的设置方法中可以不用声明直接使用value变量。当对属性进行赋值时setter方法被调用。

      C#中的属性一般具有一个get方法和一个set方法,get方法用于读取属性值,set方法用于设置属性值,但并非都是必须的,属性可以只有get方法或set方法,只有get方法的属性只可以读取,只有set方法的属性只能写入,不能读取。

      使用属性的好处:隐藏数据成员,提高程序的健壮性和灵活性。

      利用属性校验数据,通过使用属性,可以对数据进行验证,避免接受不合法的数据,提高程序健壮性。如下面例子,通过属性限制age的值。

     1     class Student
     2     {
     3         private string name;
     4         public string Name
     5         {
     6             get { return name; }
     7             set { name = value; }
     8         }
     9 
    10         private int age;
    11         public int Age
    12         {
    13             get { return age; }
    14             set 
    15             {
    16                 if (value < 0 || value > 120)
    17                 {
    18                     Console.WriteLine("Invaild age!!");
    19 
    20                     return;
    21                 }
    22                 else
    23                 {
    24                     age = value;
    25 
    26                     Console.WriteLine("Age set to: {0}", age);
    27                 }
    28             }
    29         }
    30     }
    31 
    32         static void Main(string[] args)
    33         {
    34             Student student = new Student();
    35 
    36             Console.WriteLine("Set student name : Nick");
    37             student.Name = "Nick";
    38             Console.WriteLine("Set student age: 25");
    39             student.Age = 25;
    40             Console.WriteLine("Student " + student.Name + "'s age is {0}!", student.Age);
    41 
    42             Console.WriteLine("Set student age: 140");
    43             student.Age = 140;
    44 
    45             Console.WriteLine("Student " + student.Name + "'s age is {0}!", student.Age);
    46 
    47             Console.WriteLine("Press enter to exit!");
    48             Console.ReadLine();
    49         }

      运行结果如下:

      

    1 Set student name : Nick
    2 Set student age: 25
    3 Age set to: 25
    4 Student Nick's age is 25!
    5 Set student age: 140
    6 Invaild age!!
    7 Student Nick's age is 25!
    8 Press enter to exit!

      属性其实是一种特殊的方法,而不是一个变量。有时候属性的确是对类中成员变量的封装,但很多时候也不是这样。

  • 相关阅读:
    论程序员的自我修养
    设计模式之:行为型设计模式(11种)
    设计模式之:结构型设计模式(7种)
    @import "../style/lines.scss" 导致background: url()路径无效问题
    node express 设置重定向
    png8和png24的区别
    vue scss 使用 及 踩坑
    js 防抖 节流
    js 次方 开方 对数
    css 修改placeholder样式
  • 原文地址:https://www.cnblogs.com/numbqq/p/5284220.html
Copyright © 2020-2023  润新知