zoukankan      html  css  js  c++  java
  • C#基础

    * 基础

    1、const和readonly的区别

      - const 静态成员,编译时确定值。只能在声明的同时初始化,是编译时的常数,默认是静态的。 const int a = b+ 1; (错),因为b是一个变量;

      - readonly 实例成员,运行时确认值。把一个字段设置为常量,可以进行计算,是运行时常数,可以在构造函数或声明时进行初始化,所有不同的对象可能有不同的值。

      相同点:

        1. 一旦初始化就都不可以再赋值;

      不同点:

        1. const 在声明时初始化; readonly在声明时或构造函数中初始化;

        2. const 隐含static,不可再写static const; readonly则不默认static,如需要可以写static readonly;

        3. const 编译期的常量; readonly运行时动态解析常量;

    2、属性和字段

      - 基本属性: 可以是静态属性归类所有,非静态属性归对象所有

    class Test
    {
        private int number;
    
        //int表示该属性所封装的数据类型
        //数据类型必须与相应的字段(number)相同   
        public int Num
        {
            get{return number;}
            set{number=value;}
        }
    
    
    // 相当于自动属性
        public string Name{set;get;}
    }
    View Code

      - 自动属性:1、在编译时,编译器为类型自动生成了私有返回字段和适当的get/set实现逻辑;

              2、自动属性必须同时具有get/set功能;

              3、由于返回的私有字段是在编译时创建的,不能直接使用new关键字分配引用类型,必须在类的构造函数内部执行,以确保对象安全诞生。

     1 class Spawn
     2 {
     3      //隐藏的int字段默认值为0
     4      public int numbers{get;set;}
     5      //隐藏的Enemy返回字段为null
     6      public Enemy MyEnemy{get;set;}
     7      
     8      //必须用构造函数重写分配给隐藏返回字段的默认值
     9      public Spawn()
    10      {
    11         MyEnemy = new Enemy();
    12         numbers = 1;
    13      }
    14      
    15      public Spawn(Enemy enemy, int num)
    16      {
    17         MyEnemy = enemy;
    18         numbers = num;
    19      }
    20 }
    View Code

       实例讲解: 

        public string Name{set;get;}  : 实例化时,系统会先分配一个叫name的private私有的内存空间,之后的读与写操作都是通过public的Name来关联name,达到封装目的,通过get/set控制读写

        public string name;  实例化时,系统直接对name属性分配内存,对name的操作也是直接操作内存中name属性的所在块。

      总结:

        属性对外暴露数据,数据存储在字段里的,可以动态计算;对内保护字段不受“非法值”污染;

        一般情况,用于表示实体(对象或类型)的状态,属性大多数是字段的包装器;

        使用属性暴露数据,字段永远是private或protected类型;

    3、数值转换

            static void Parse(int counter)
            {
                int res = 0;
                for (int i = 0; i < counter; i++)
                {
                    try
                    {
                        //不满足要求,parse会抛出异常
                        res = int.Parse(val);
                    }
                    catch
                    {
                        res = 0;
                    }
                }
    
            }
            static void TryParse(int counter)
            {
                int res = 0;
                for (int i = 0; i < counter; i++)
                {
                    //不会抛出异常,会返回false,同时传入的值设为0
                    int.TryParse(val, out res);
                }
            }    
    int.parse()和 tryParse()用法

    4、Assembly

                //当前项目所有的程序集:
                Assembly[] assmblyList = System.AppDomain.CurrentDomain.GetAssemblies();
                /**首先使用Load()方法,LoadForm()与LoadFile()的区别:
                 * LoadFile()只加入相应的dll文件,不会加载依赖项,比如adb.dll中引用了def.dll,则 def.dll不会被载入;
                   LoadForm()会加载所有的文件
                 */
                Assembly.Load("string或者AssemblyName为参数");
                Assembly.LoadFrom("C:/ABC/Test.dll");
                Assembly.LoadFile("");

    5、char[] byte[] 

                //byte[] <==> string
                string str = "是a";
                //使用Unicode编码将字符串变为字节序列
                byte[] b = Encoding.Unicode.GetBytes(str);
                string s1 = Encoding.Unicode.GetString(b);
    
                //char[] <==> byte[],字符→字节【编码】,反过来解码,【byte 0 ~ 255】
                byte[] b1 = new byte[5] { 0x01, 0x02, 0x03, 0x04, 0x05 };
                //将字节数组解码为字符数组
                char[] c = Encoding.ASCII.GetChars(b1);
                //将字符数组编码为字节数组,当char值大于256时就会转换错误
                byte[] b2 = Encoding.Default.GetBytes(c);
    
                //string <==> char[]
                string s2 = "adbjk23";
                char[] c2 = s2.ToCharArray();
                string s3 = new string(c2);

    6、扩展属性

    6.1 在本来中扩展

     [BsonIgnore]
            public Dictionary<GpsProperty, string> Property { get; set; }
    
    
            /// <summary>
            /// 获取或者设置扩展属性值
            /// </summary>
            /// <param name="property"></param>
            /// <returns></returns>
            public string this[GpsProperty property]
            {
                get
                {
                    string val;
                    Property.TryGetValue(property, out val);
                    return val;
                }
                set { Property[property] = value; }
            }
    
    //使用
     WeightValue = item.Property.ContainsKey(GpsProperty.ZtWeightValue) ? Convert.ToInt32(item.Property[GpsProperty.ZtWeightValue]) : 1,
    本类扩展使用

    6.2 在另外类中扩展

       注意:必须是静态类,静态方法;调用时当实例方法调用。

     1 static class StringExtension
     2 {
     3     public static string DoubleString(this string str)  //表示把这个方法添加到string类中
     4     {
     5         return str + str;
     6     }
     7 }
    
    
    string str = "ABCD";
    Console.Write(str.DoubleString()); 
    View Code
  • 相关阅读:
    无人值守安装linux
    数组中只出现过一次的数字 牛客网 剑指Offer
    数组中出现次数超过一半的数字 牛客网 剑指Offer
    数据流中的中位数 牛客网 剑指Offer
    数字在排序数组中出现的次数 牛客网 剑指Offer
    数值的整数次方 牛客网 剑指Offer
    按之字形顺序打印二叉树 牛客网 剑指Offer
    把数组排成最小的数 牛客网 剑指Offer
    把字符串转换成整数 牛客网 剑指Offer
    把二叉树打印成多行 牛客网 剑指Offer
  • 原文地址:https://www.cnblogs.com/SmileSunday/p/9323035.html
Copyright © 2011-2022 走看看