zoukankan      html  css  js  c++  java
  • 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!

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

  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/numbqq/p/5284220.html
Copyright © 2011-2022 走看看