zoukankan      html  css  js  c++  java
  • c#重点[数据类型,构造方法,变量,变量,运算符,装箱,拆箱]

    1.命名规范

    •    类  :名词 每个单词的首字母大写 Dog Student  PersonClass
    •   字段:首个字母小写,如果有多个单词,后面的单词首字母大写    

                  string name=""

                  string sMyString=""

    •   方法:动词 每个单词的首字母大写 Cry SayHi 

    2.vs版本

          vs2015  .net4.6

          vs2013  .net4.5.1

          vs2012  .net4.5

          vs2010  .net4.0

          vs2008  .net3.5

          vs2005  .net3.0

          vs2003  .net2.0

        高版本可以兼容低版本,低版本不可以兼容高版本

        如果要在2008里面打开2013版本的项目,只要更改一下项目属性的.net版本,重新生成一下即可。

        

    3.数据类型

        包括数值类型和引用类型

    1.     数值类型:计算机最小的信息单位byte(字节),一个字节八位(bit),一个字母一个字节,一个汉字两个字节。

               

        2.   引用类型:【数组,对象,string,object】

              引用类型的变量又称对象,C#有两个内置的引用类型:object类型和string类型,object是所有类型的父类,可以将任何类型的赋值赋给object类型的变量。string是字符串类型,字符串对象一旦创建,内容就不可以更改,它是不可变的。

             值类型和引用类型的区别:

             eg:

                            

                          

              我们编译之后,这些变量都是存储于数据,由CPU处理,内存里面怎么存储数据呢?内存里面有两个区域:一个栈区域和一个堆区域,我们看一下它们的工作原理和区别

             值类型:所有的值类型都是存储于栈里面

                        

                    首先int iNum1 = 10的时候,它会在栈里面开辟一个名为iNum1的内存空间值为10,int iNum2 = iNum1;它又会在栈里面开辟一个iNum2的内存空间其值为          iNum1的值,所以iNum2的值              为10。

                   【值类型的赋值就是值的拷贝,所以iNum2等于10,iNum1重新赋值为20;iNum1的内存空间值则变为2。

             引用类型:[对象也是引用类型]

                         

                 首先string sString1 = "aaa";时,它会在栈里面开辟一个名为sString1的内存空间,但它的却是存在堆里面的【引用类型的值存储于堆里,它会返回一个引用地址/指针给栈,就好比栈里面返回的引用           地址是家庭地址,通过地址我们就可以找到人一样;

                 当string sString2 = sString1;时,又会在栈里面开辟一个名为sString2的内存空间,[引用类型的赋值就是地址的拷贝],所以它的地址等于sString1的地址=引用地址1指向"aaa";

                 当sString1 = "bbb";时,[一个字符串,一旦被创建之后,它就不会在堆里面修改],所以它会重新开辟一个空间,sString1的地址就会变成引用地址2指向"bbb",所以sString2的值为"aaa"。

                

     4.构造方法

         例如:  我们自己定义一个构造方法 

         1  class Person
         2      {
         3          public string name = "";
         4          public int age = 0;
    public static int i=0;
    5 public Person (string name,int age) 6 { 7 this.name = name;//this表示当前对象 8 this.age = age; 9 } 10 public void SayHi(string name,int age) 11 { 12 Console.WriteLine(string.Format("hello,我叫{0},今年{1}岁",name,age)); 13 } 14 }

                 如果在Program里面实例化对象就会出现以下错误:

                  

                因为[每个类都有一个默认的无参构造方法],如果不写构造方法的话,默认情况下它就会调用默认的这个无参的构造方法,再去创建对象时,它就会调用不到,默认是写的构造参数,如果想去调用的话,一          定要在重新写一个无参构造方法public person(){}。

               [调用类里面所有的非静态成员,要通过类的对象去调用]

                 

                 这个运行的过程1首先调用这个构造方法,把它传进来的name,age给成员变量(字段)

                 以上程序中, Person p1=new Person("张三",20);是怎么在堆栈里运行的?详解见7

     5.全局变量.局部变量

           全局变量:类的里面,方法的外面,也叫成员变量

           局部变量:方法里面定义的,只在方法里面用

     6.静态和非静态

           通过关键字static区分静态和非静态

           怎么区分?

           非静态:假如我想得到某个学生的文具盒,我们不能直接去拿,则是通过学生这个对象去拿。[不能通过类直接去调用]

           静态:教室里面还有一些黑板,水桶等一些公共的东西,这个则可以通过类去拿[可以通过类直接去调用]

             

     7. 程序在内存里面怎么存放的.

           

          当实例化一个类的对象时,那么在这个类里面所有非静态的成员(字段和方法)全都生成一次

          方法不是直接存取的,方法在内存里单独有一个方法区,用于存放方法,方法是通过方法引用地址去指向

          实例化一个对象时,类里面所有的成员,不管什么类型都存于堆里(SayHi(string name,int age)中,又有值类型?又有引用类型?)

          学习中,如果遇到类似情况,"未将对象引用到对象的实例?"

                那一定是"Person p1=Null"它的值为空/通过p1调用这个类没有在内存里面开辟内存空间/没有实例化对象/没有在堆里创建name,age,所以无法调用。

         "Person p2=new Person("李四",22);"又开辟一个空间,当创建一个对象时,它会先在堆里面扫描之前有没有创建,如果有的话,会把类里面非静态的成员作为一个模板直接拷贝。结果返回到栈里。

         person.i?为什么调用不会出错呢?

                   

         因为i根本不存在于堆里面,所有的静态内容都是存在于一个静态区里面,包括方法,字段。在声明变量的时候它已经存到里面了。

         

     8.装箱,拆箱[尽量避免装箱和拆箱]

        装箱:值类型转换为引用类型

         eg:    

    int i = 10;
    Console.WriteLine(i.ToString());

        拆箱:引用类型转为值类型

         eg:

    string s = "10";
       Console.WriteLine(Convert.ToInt32(s));//转为int类型
    string d = "10.24";
       Console.WriteLine(Convert.ToDouble(d));//转为double类型  

        注:装箱和拆箱在处理大量数据的时候会造成系统缓慢,耗用系统资源,在开发中尽量避免装箱和拆箱.  避免的处理办法使用泛型方法.

     9.数据类型转换:显式转换和隐式转换

         隐式转换:低精度转高精度,直接转。

    1 int i = 10;
    2  Convert.ToDouble(i);

        显示转换:高精度转换为低精度,由于数据的差异,有可能丢失部分数据。     

     double d = 10.23;
       int i=Convert.ToInt32(d);
    

      

     10.c#中的运算符

       10.1.算术运算符

           +(加)、-(减)、*(乘)、/(除)和%(取余数)五个二元运算符和++(自增,执行之后才加)、- -(自减,执行之后才减)两个一元运算符++(自增,加了之后运行)、- -(自减,减了之后运行)的用法

                int a = 3;
                int b = 2;
                int c, d;
                long e, f;
                int i;
                c = a * b / b;
                d = a / b * b;
                e = (long)a * b / b;
                f = (long)a / b * b;
                i = a % b;
                Console.WriteLine(c);
                Console.WriteLine(d);
                Console.WriteLine(e);
                Console.WriteLine(f);
                Console.WriteLine(i);

             结果:

                      

            

        10.2.赋值运算符

                     

           注意:a.*赋值运算必须是类型兼容的,即左边的变量必须能够接受右边的表达式的值,否则会产生编译错误。

                    b.如果是对象赋值,则称为引用赋值。将右边对象的引用值(地址)赋给左边的变量,这样,两个变量地址相同,即指向同一对象

          

       10.3.关系运算符

               ==,!=,<,>,<=,>=

       10.4.逻辑运算符:&&(并且,一个为false,则全为false)、||(或者,一个为True,则全为True)

                        

     1             int x = 1;
     2             int y = 2;
     3             int z = 3;
     4             bool u = false;
     5             u = !((x >= --y || y++ < z--) && y == z);
     6             Console.WriteLine(u);
     7 
     8             y = 2;
     9             u = !((x >= --y | y++ < z--) & y == z);
    10             Console.WriteLine(u);

               结果为:True、 False。   

       10.5优先级

              从高到低:一元运算符----二元运算符---关系运算符----逻辑运算符-----赋值运算符

     11.string

        11.1.字符串恒定性          

         1) 字符串我们可以看成是一个字符数组。

             2) str.Length表示字符串里面字符的个数。

             3) 字符串对象一旦被创建,这个对象就不能被修改。

             4) 在创建一个字符串对象的时候,会先去字符串数据池(在堆中)寻找是否有相同的字符串内容的对象,如果有,就直接让变量指向这个对象,如果没有,就创建新的对象。

        11.2.字符串常用方法

            1)Equals方法判断两个字符串是否相同, 如果相同返回值为true,否则为false

            2)定位字符串

                 

            3)截取字符串:substring

            4)插入和填充字符串 

               Ⅰ.insert方法  

             string str1 = "hi";
             string str2 = "world";
             string str3=str1.Insert(1,str2);
          Console.WriteLine(str3);
    View Code

               Ⅱ.PadLeft/PadRigth方法             

    1             string s = "hi";
    2             Console.WriteLine(s.PadLeft(4, '@'));
    3             Console.WriteLine(s.PadRight(4, '@'));
    daima

                   结果:

                    

           5)删除和剪切字符串Remove方法

             Ⅰ.Remove方法

                 Remove(开始删除的位置,删除的数量)

                string s = "  hii";
                Console.WriteLine(s.Remove(0, 2));
    Remove

              Ⅱ.Trim、TrimStart(去掉前面的空格)、TrimEnd(去掉后面的空格)方法       

                 Trim在c#中的两种用法:去前后空格和传一个数组过滤。                          

                char [] ch1={'@','#','$'};
                string s1="@China#$";
                string s2 = s1.Trim(ch1);
                Console.WriteLine(s2);
    c#Trim用法

              Ⅲ. CopyTo方法:将一个字符串复制到数组里面去

                 CopyTo(要目标的目标位置,目标数组,指定目标中开始存放的位置,要复制的字符个数)   

                string s1 = "China";
                char [] ch1=new char[50];
                s1.CopyTo(0,ch1,0,2);
                Console.WriteLine(ch1);
    CopyTo

           6)替换字符串Replace方法

                string s1 = "he";
                string s2 = s1.Replace("e","l!");
                Console.WriteLine(s2);
    Replace

           7)Format方法:string.Format();把一个内容传到字符串里面去{0}是占位符

               字符串变量传值:

               string s1 = "a";

               string s2 = "b";

               string s = string.Format("大家好,小明今年{0}岁,小王今年{1}岁", s1, s2);

             将S1的值传递给{0},S2的值传递给{1},整合成一个新的字符串赋值给S 

       11.3 字符串拼接StringBuilder 

                          

             string在堆中运行,string s1="hi"被创建之后,就不会更改,则它会另辟空间,它就会占用太多空间。stringBuilder如图

             stringBuilder引入的命名空间:using System.Text;

             创建一个stringBuilder对象[stringBuilder sb=new stringBuilder()]。

          

  • 相关阅读:
    python自动化测试,将测试结果的报告写入本地中(HTMLTestRunner)
    谷歌+selenuim ide导出python代码 详细代码
    谷歌+selenium插件的安装
    C# List转DataTable(支持匿名类型)
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    喵的Unity游戏开发之路
    Unity3D游戏开发入门引导:Unity3D收费方案和版本、下载地址、安装教程
  • 原文地址:https://www.cnblogs.com/wangwangwangMax/p/5425361.html
Copyright © 2011-2022 走看看