zoukankan      html  css  js  c++  java
  • C#入门--字段与属性

    C#入门--字段与属性

      “字段”,它是包含在结构中的对象或值。字段使类和结构可以封装数据。

      属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法。这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。

     

    public class Program
    {
        private int _number;    //_number为字段
    
        public int Number        //Number 为属性
        {
            get { return _number ;}
            set { _number = value ;}
        }
    
    }

     

      从上面的例子可以明显看出,字段就是变量,而属性就是字段的访问方式(通常字段是private,属性是public),这类似于C++,申明一个private 类型的变量x,通过 GetX()与SetX()函数来对x进行操作。而这里的属性就是将这两个函数合在一起通过set与get关键字对相应的字段进行处理。

      属性的出现,极大的简化了我们的编码工作。与C++和Java比较一下,你会发现我们不必为了一个字段而专门写两个函数(虽然这些函数很简单),而且使得代码编的更简洁,更易读,更易改。

      当然,属性也可对字段进行一些处理(例如返回字段时判断其是否为空,对字段进行赋值时判断value是否有效等简单或者其它更复杂的操作)。也可以设置属性的访问权限(如只读,只写,可读可写,不可读不可写)。而且现在的C#版本已经支持自动属性,即不必为属性指定字段,如 public int Number {get;set;} 这样就可以申明一个属性,编译器会为其自动分配一个字段(编译时),总之通过属性,可以极大的简化我们的操作,使得代码的可读性更高,可维护性更高。下面让我们通过一些例子来深入理解属性的作用。

        public class Program
        {
            private static string _number;
    
            public static string Number //非自动属性,可读可写
            {
                get
                {
                    if (_number == null)
                         return Convert.ToString(new NullReferenceException());
                    return _number; 
                    
                }
                set
                {
                    string temp = "";
                    foreach (var ch in value)
                    {
                        if (char.IsDigit(ch))
                            temp += ch;
                    }
                    _number = temp;
                }
            }
    
            public static string ReadWrite { get; set; }    //自动属性,可读可写
    
            public static string ReadOnly { get { return "0000"; }} //自动属性,只读
    
            private static string _writeOnly;
    
            public static string WriteOnly { set { _writeOnly = value; } }  //非自动属性,只写
    
            public static void Main(string[] args)
            {
                Number = "23kljk3j423903kj43kj432kj";
                ReadWrite = "ReadWrite";
                //ReadOnly = "ReadOnly";    //报错,此属性只读
                WriteOnly = "WriteOnly";
    
                Console.WriteLine(Number);
                Console.WriteLine(ReadWrite);
                Console.WriteLine(ReadOnly);
                //Console.WriteLine(WriteOnly); //报错,此属性只写
                Console.ReadKey();
            }
        }
    
    
    //Results:
    //23342390343432
    //ReadWrite
    //0000

     

     

     

     

  • 相关阅读:
    添加脚本真机调试Error launching remote program: failed to get the task for process xxx.
    问题资源Android lint 能够做的事情
    调用生成通过存储过程自动生成AWR报告
    破解行Android apk 逆向工程研究﹣破解 MyTV HD 機種限制手記
    代码判断判断给定的图是否是有向无环图
    修改系统android2.3.4增加gsensor
    类对象工厂设计模式(Factory Pattern)
    脚本指令《游戏脚本的设计与开发》第一章 读取和解析一个脚本文件
    级别指示Android Hierarchy 工具的一些知识
    nullnull[小代码] 双击BACK键 退出
  • 原文地址:https://www.cnblogs.com/SilentCode/p/4920835.html
Copyright © 2011-2022 走看看