2015-10-26 C# 第二次课

一、数值类型的主要包括值类型和引用类型

  1.1、值类型及其调用原理:

    

    static void Main(string[] args)

        {

            int i = 10;

            int j = i;//把i的值赋值给j

            i = 20;

            Console.WriteLine(j);

        }

以上代码及图的说明:


/*   数值类型赋值就是值的拷贝//// 


i的值存储在栈;


int j=I(意思是将i的值拷贝一份给J,同样也是存储在栈);


上面代码输出结果10        */

  1.2、值类型:所有数值类型都是值类型(short,int,long,float,double),枚举,布尔类型,结构。

名称

说明

所占字节

范围

byte

字节型

1

-27~27-1

short

短整型

2

-215~215-1

int

整型

4

-231~231-1

long

长整型

8

-263~263-1

char

字符型

1

0~65535

float

单精度型

4

±1.5*10-45~±3.4*1038

double

双精度型

8

±5.0*10-324~±1.7*10308

bool

布尔型

1

只有true和false两个值

  2、引用类型:对象,字符串,object,数组   

     引用类型的变量又称对象,C#有两个内置的引用类型:object类型和string类型

       object是所有类型的父类,可以将任何类型的赋值赋给object类型的变量。

               string是字符串类型,字符串对象一旦创建,内容就不可以更改,它是不可变的。

   2.1引用类型及其调用原理:

      

 

/*以上代码的几点说明

string s1 = "a";

string s2 = s1;

s1 = "b";

Console.WriteLine(s2);

     S2引用类型的值类型赋值如上图所示,输出结果是a           */

*/以上图示的几点说明:

1. 定义一个静态变量public static int i = 10;

2.定义一个静态无返回值的方法      

 public static void Cry() {

            Console.WriteLine("我爱你");

        }

 3.以上静态变量和静态方法,不用实例化对象同样可以调用,

    例如静态变量i的调用:Person.i

    静态变量Cry方法的调用: Person.Cry;   

    常用和公共的变量或方法一般都设置为静态.

注意:当一个类是一个静态类的时候,类里面的所有成员都是静态的。

总结:1.要去调用一个类里面的非静态的成员(字段、方法),需要通过类的一个对象去调用。

    

   2.要去调用一个类里面的静态的成员,只需要通过类去调用即可。

    

 4.存储在堆的非静态变量和方法区的调用,必须要通过实例化对象来调用,否则强制调用会产生错误.

例如:

  实例化一个对象:Person p=new Person,

  Person的变量name的调用: p.name 

  Person的方法Sayhi的调用: p.Sayhi()

注意:1.当实例化一个类的对象的时候,堆里面会将类里面的所有的非静态成员(变量、方法)生成。

   2.当去实例化一个类的对象的时候,首先会在堆里面检索该类的对象是否存在,如果存在就会拷贝一份

 5.如果已经完成实例化P的基础上,再实例化一个P1,那它的值在堆会整体打包复制一份.

二、装箱、拆箱

  装箱:把值类型装换成引用类型

实例:

Int i=10;

String s=i.ToString();

Console.WriteLine(s);

  拆箱:把引用类型转换成值类型

实例:

String s=”10”;

Int i=Convert.ToInt32(s);

Console.ReadKey();

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

三、常量和变量

  1. 常量的定义方法,例如const double pi=3.14
  2. 成员变量也叫全局变量,写在类的里面(class program),方法的外面(staic void Main(string[]) args)的变量称为全局变量,在本类中任何地方都可调用.
  3. 局部变量,写在方法的里面的变量称为局部变量.只能在该方法里面调用.

四、数据类型转换

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

  int i=123;

  Double b=i;

  显式转换:高精度转为低精度,必须指明要转换的目标类型,由于数据的差异,有可能丢失部分数据。

Class Program

{

   static void Main()

   {

      double x=1223.4;

      int a;

      a=(int)x;

      System.Console.WriteLine(a);

}

}

注:高精度类型向低精度类型转型,数值会发生改变.例如1223.4变成1223

五、C#中的运算符使用

14.1算术运算符

+(加)、-(减)、*(乘)、/(除)和%(取余数)五个二元运算符和++(自增)、- -(自减)两个一元运算符

Eg:class Program

    {

        static void Main(string[] args)

        {

            int a = 12345;

            int b = 234567;

            int c, d;

            long e, f;

            c = a * b / b;

            d = a / b * b;

            e = (long)a * b / b;

            f = (long)a / b * b;

            Console.WriteLine(c);

            Console.WriteLine(d);

            Console.WriteLine(e);

            Console.WriteLine(f);

        }

}

结果:

-5965

0

12345

0

 

++(自增)、- -(自减)的用法

六、赋值运算符

操作符

运算规则

意义

=

a=b

将b赋值给a

+=

a+=b

a=a+b

-=

a-=b

a=a-b

/=

a/=b

a=a/b

*=

a*=b

a=a*b

%=

a%=b

a=a%b

??

a=b??c

B为null吗,为null则a=c不为null则a=b

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

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

  问号的两个实例

              //int i = 3 > 2 ? 10 : 20;

              //Console.WriteLine(i);

  以上代码单问号是三目运算,意思是I =3是否大于2,如果成立返回10,反则返回20.

             //string s1 = null;

             //string s2 = s1 ?? "aa";

             //Console.WriteLine(s2);

  以上代码双问号是变量为空的判断,S2的返回值,如果S1为空返回aa,反则返回S1的值.

 6.1关系运算符

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

 6.2逻辑运算符

A

B

!A

A&B

A|B

A^B

A&&B

A||B

False

false

true

false

false

false

false

false

False

true

true

false

true

true

false

true

True

false

false

false

true

true

false

true

True

true

false

true

true

false

true

true

 

 

 

 

 

 

 

 

Eg:

class Program

    {

        public static void Main()

        {

            int x = 1;

            int y = 2;

            int z = 3;

            bool u = false;

            u = !((x >= --y || y++ < z--) && y == z);

            Console.WriteLine(u);

以上代码说明:

将以上代码分解

  1.   a=   x>==--y 即1>=1 返回true;       b=   y++<z--  即3<2  返回false;

            A1=    a || b 即 true || false返回 true ;

     2.    B1=    y==zz 即2=3 返回 false;

     3.    !(A1 && B1)  即true && false  返回 false    !(false)=true 非假=真

  6.3优先级

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

七、String

  1、字符串恒定性

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

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

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

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

  2、字符串常用方法

   2.1: Compare方法

参数条件

返回值

strA小于strB

负整数

strA等于strB

0

strA大于strB

正整数

 

  2.2:Equals方法

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

  实例:

  //string s1 = "a";

            //string s2 = "b";

            //Console.WriteLine(string.Equals(s1, s2));

    //Console.WriteLine(s1.Length);

  3:定位字符串

StartWith/EndWith

判断一个字符串是否以一个字符串_开头(结尾),返回值true/false

indexOf/LastindexOf

某个指定的字符或字符串第一次(最后一次)出现的位置

  4:截取字符串

    Substring

  5:插入和填充字符串

    (1)insert方法

    string str1 = "hi";

            string str2 = "world";

            string str3=str1.Insert(1,str2);

          Console.WriteLine(str3);

结果为:hworldi
2)PadLeft/PadRigth方法

         string str1=”hi”;

         string str2=str1.PadLeft(4,’@’);

         Console.WriteLine(str2);
结果为:@@hi

    6:删除和剪切字符串

        (1)Remove方法 

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

    (2)Trim、TrimStart、TrimEnd方法

  Char[] str1={‘@’,’#’,’$’};

     string str2=”@China$#”;//

     string str3=str2.Trim(str1);

    Console.WriteLine(str3)

  结果为China

Trim第一个用法是将字符串的两边空格去掉;

Trim第二个用法是在第二个字符串STR2中去掉包括STR1符号后生成的值.

(3)CopyTo方法

      string str1=”China”;

      char[]str2=new char[100];

      str1.CopyTo(0,str2,0,3);//要复制的字符的起始位置,目标数组,指定目标数组中开始存放的位置,要复制的字符个数

      Console.WriteLine(str2);

结果为:Chi

     7:替换字符串

string str1=”hello”;

string str2=str1.Replace(“ll”,”r”);

Console.WriteLine(str2);

结果为:hero
posted @ 2015-10-27 01:21  75-逢场作戏  阅读(192)  评论(0编辑  收藏  举报