C#
一.如何编译cs文件:
 打开VS编译工具,通过cd+空格+文件路径,切换到指定编译地方。通过命令csc+空格+文件名.cs来编译,编译后可以直接运行生成的.exe文件。也可以在VS命令工具中键入文件名来查看运行结果。
二.C#变量:
 1.值类型:int,double,byte,float,enum,struct,char,bool.值类型都有一个引用类型与之相对应。
 2.引用类型:string,数组,类,接口,delegate.
三.类型转换:
 1.把小类型的数据赋值给大类型数据时候,系统自动进行隐式转换。反之则需要进行显式转换
 1强制转换:类型A a = (类型A) b;
 一般用于值类型与值类型间的转换或者引用类型间的转换。
 2通过Convert.ToType()进行转换;
 值类型与引用类型间的相互转换最好使用Convert转换。
四.string类型的字符拼接:
 通过@来全部转义,也可以通过斜杠"\"来转义
 

View Code
 1 public static void Main()
 2  {
 3   //{"name":"小强","age":22,"book":"钢铁是怎样炼成的"}
 4   Console.WriteLine(@"{""name"":""小强"",""age"":22,""book"":""钢铁是怎样炼成的""}");
 5   string name = "小强";
 6   int age = 22;
 7   Console.WriteLine(@"{""name"":"""+name+@""",""age"":"+age+@",""book"":""钢铁是怎样炼成的""}");
 8   // insert into emp values(1001,'小强',34,89);
 9   // deletefrom emp where sid = var;
10   int sid = 1001;
11   Console.WriteLine("insert into emp values(1001,'小强',34,89)");
12   Console.WriteLine(@"deletefrom emp where sid = "+sid+"");
13  }


五.数组的定义
 1.Type[] 数组名 = new Type[size];
 2.Type[] 数组名 = {元素,……,元素};
 3.Type[] 数组名 = new Type[]{元素,……,元素};
 new操作符是在内存中开辟一段连续的空间。获取数组长度:数组名.Length。
六.C#函数
 [访问修饰符] [static] 返回值 函数名([参数列表])
 {
  //方法体
 }
 函数即方法即功能
 1.函数作用:1封装代码块,提高代码重用性2一个函数就是一个方法,实现一个功能。
 2.函数参数的传递:
 1.值传递(传递a,b变量中的值)
 

View Code
public static void Main()
 {
  int b = 7;
  Console.WriteLine(b);
 }
 public static void TestRef(int a)
 {
  a = 9;
 }


 2.址传递(传递的时变量的地址)
 

View Code
public static void Main()
 {
  int b = 7;
  TestRef(ref b);
  Console.WriteLine(b);
 }
 public static void TestRef(ref int a)
 {
  a = 9;
 }


 3.out传递(址传递,要求变量没有初值)

View Code
 public static void Main()
 {
  int b;
  TestOut(out b);
  Console.WriteLine(b);
 }
 public static void TestOut(out int a)
 {
  a = 24;
 }


  4.param可变长变量
  

View Code
 1 public static void Main()
 2  {
 3   TestParams("1",2,3,4);
 4  }
 5  public static void TestParams(string a,params int[]a)
 6  {
 7   foreach(int i in a)
 8   {
 9    Console.WriteLine(i);
10   }
11  }


   注意:params变量类型是数组类型,在传递的时候可以传入一系列元素。一般情况可变长的params变量放到参数类表的最后面。
七.C#面向对象
 1.类:具有公共属性和方法的抽象和封装。
 [访问修饰符] class 类名
 {
 //类体;
 }
 类包含:成员变量、成员属性、成员方法。
 变量:成员变量一般是Private类型,在类外部使用通常需要把变量封装成属性。
 属性:对成员的变量进行的封装,使它具有读写权利。
 方法:成员变量即为成员函数亦等于成员功能
 [访问修饰符] 返回值 函数名([参数列表])
 {
 }
 2.对象:类实例化的具体成员。在程序中一切运行的基本单位都为对象。
 创建对象的过程就是把类中所有变量、属性、方法复制一份赋给对象的内存空间。
 对象即为成员即为实例
 3.构造函数:
 构造函数是用来创造函数的,能开辟出一个内存空间,放在堆里面。创造的对象指向堆的内存空间。构造函数没有返回值。
 [访问修饰符] 类名(构造函数名)
 {
 
 }
 构造函数名必须和类名一样。
 作用:1创建对象2初始化成员变量3实现对象的多元化
 默认情况下,系统会为类提供一个空的构造函数。自己增写构造函数后,默认的构造函数消失。
 4.函数的重载:
 具有相同方法名,但是参数类型、顺序、个数不同的函数互为重载。互为重载的函数必须位于一个类里面。
 5.this关键字:
 this关键字指得是当前对象。使用this关键字可以区别成员变量和参数,起到明确使用对象的作用。
 6.static关键字:
 通过static关键字修饰的方法、变量、属性是属于类的,不能通过对象来访问。(是谁的谁调用)。但是成员的方法可以直接调用static修饰的方法和变量,建议用类调用static修饰的方法和变量。static创建的变量和方法直至程序退出,内存空间才会释放。
      

View Code
 1 public class StudyStatic
 2        {
 3   public static void Main()
 4   {
 5    People.sing();
 6   }
 7         }
 8  public class People
 9  {
10   public static string name = "人类";
11   public static void sing()
12   {
13    Console.WriteLine("这是类的方法");
14    People p = new People();
15    p.Test();
16   }
17   public void Test()
18   {
19    Console.WriteLine("这是成员方法");
20   }
21  }


 7.readonly关键字:
 由readonly修饰的关键字不能再赋值:public static readonly string name = "小强";
 8.新特性:
  1.属性
  可以直接写属性,不需要定义成员变量,也不需要具体实现get set 方法
 

View Code
 1  public class StudyNewProperty
 2   {
 3    public static void Main()
 4    {
 5     People p = new People();
 6     p.Name = "小强";
 7     p.Age = 1;
 8     p.Print();
 9    }
10   }
11   public class People
12   {
13    public string Name
14    {
15     get;set;
16    }
17    public int Age
18    {
19     get;set;
20    }
21    public void Print()
22    {
23     Console.WriteLine(Name + "今年" + Age + "岁了。");
24    }
25   }


        2.创建对象:
  可以直接给属性赋值,属性之间用逗号隔开。
 

View Code
 1  public class StudyNewProperty
 2   {
 3    public static void Main()
 4    {
 5     People p = new People(){Name = "小强",Age = 1};
 6     p.Print();
 7    }
 8   }
 9   public class People
10   {
11    public string Name
12    {
13     get;set;
14    }
15    public int Age
16    {
17     get;set;
18    }
19    public void Print()
20    {
21     Console.WriteLine(Name + "今年" + Age + "岁了。");
22    }
23   }


        3.var关键字和匿名对象
  可以通过var关键字标识任何类型的变量。
   通过new关键字来创建匿名对象,这个对象没有类型,属性可以随意定义,只能通过var关键字定义的变量来接收对象。

View Code
 1   public class StudyNewProperty
 2   {
 3    public static void Main()
 4    {
 5     var p = new People(){Name = "小强",Age = 1};
 6     p.Print();
 7     //匿名对象
 8     var a = new{forcolor = "yellow",leg = 4};
 9     Console.WriteLine(a.leg);
10    }
11   }
12   public class People
13   {
14    public string Name
15    {
16     get;set;
17    }
18    public int Age
19    {
20     get;set;
21    }
22    public void Print()
23    {
24     Console.WriteLine(Name + "今年" + Age + "岁了。");
25    }
26   }


八.继承:
 继承是用来扩展自身功能,通过":"来实现继承。
 c#中只支持单继承,即一个类只能有一个直接父类。
 父类=基类=超类
 子类=sub类=派生类
 1继承中的构造函数:
  默认情况,子类中的构造函数调用的是父类默认的空的构造函数。
  父类中自定义了构造函数,则子类中必须显式的调用父类中任意一个构造函数(:base())
 

View Code
 1 public class StudyExtend
 2  {
 3   public static void Main()
 4   {
 5    People p = new People("小强");
 6   }
 7  }
 8  public class WuDang
 9  {
10   private string name;
11   public WuDang()
12   {
13    Console.WriteLine("i'm first");
14   }
15   public WuDang(string str)
16   {
17    Console.WriteLine("i'm first");
18   }
19   public WuDang(string str,int i)
20   {
21    Console.WriteLine("i'm first");
22   }
23   public WuDang(int i )
24   {
25    Console.WriteLine("i'm first");
26   }
27   public string Name
28   {
29    get{return this.name;}
30    set{this.name = value;}
31   }
32   public void Taiji()
33   { 
34   }
35  }
36  public class People : WuDang
37  { 
38   public People(string name) :base("aaa")
39   {
40    Console.WriteLine("I'm second");
41   }
42  }


 2方法的重写:
  当父类方法不能实现某功能,但却调用了此方法,则可以通过子类方法的重写,完善其功能。
  父类被重写的方法前面加上virtual关键字修饰。重写的子类方法前面加上override关键字。
  重写要求存在继承关系,而且重写的方法与被重写方法类型一致。
 3多态
  不同环境下充当不同的角色
    1上转型:子类对象赋值给父类对象;此时父类对象调用的是自己的属性、方法、变量或者是子类重写过的方法。
    用途:指定标准。根据具体实现不同,调用不同的方法,继而实现不同功能和样式。
 

View Code
 1 public class StudyExtend
 2  {
 3   public static void Main()
 4   {
 5    //上转型
 6    WuDang w = new People();
 7    w.sing();
 8   }
 9  }
10  public class WuDang
11  {
12   public virtual void sing()
13   {
14    Console.WriteLine("father");
15   }
16  }
17  public class People : WuDang
18  {  
19   public override void sing()
20   {
21    Console.WriteLine("son");
22   }
23  }


    2下转型:把已经上转型的父类对象赋值给子类对象(需要强制转换)例如:People p =(People) w;
 

View Code
 1 public class StudyExtend
 2  {
 3   public static void Main()
 4   {
 5    //上转型
 6    WuDang w = new People();
 7    w.sing();
 8    //下转型
 9    People p =(People) w;
10    p.Test();
11   }
12  }
13  public class WuDang
14  {
15   public virtual void sing()
16   {
17    Console.WriteLine("father");
18   }
19   public virtual void Print()
20   {
21    Console.WriteLine("fffff");
22   }
23  }
24  public class People : WuDang
25  {
26   public override void sing()
27   {
28    Console.WriteLine("son");
29   }
30   public void Test()
31   {
32    Console.WriteLine("sssss");
33   }
34  }


 4抽象类:
  [访问修饰符] abstract class 抽象类名
 {
  //不能有构造函数
  //可以定义像普通类一样的变量、属性、方法
  //可以有抽象函数
 }
  

View Code
 1  public class StudyAbstract
 2  {
 3   public static void Main()
 4   {
 5    God.Say();
 6    YeSu y = new YeSu();
 7    y.sing();
 8    //抽象方法的调用
 9    y.Fun();
10    //可以把子类的对象给抽象类变量,从而实现抽象方法调用。
11    God g = new YeSu();
12    g.Fun();
13   }
14  }
15  public abstract class God
16  {
17   //类方法可以由抽象类直接调用
18   public static void Say()
19   {
20    Console.WriteLine("Hello");
21   }
22   //抽象类没有构造函数,即不能通过new关键字创建对象,
23   //无法直接调用成员方法。可以通过继承抽象类,实现
24   //方法的调用。
25   public void sing()
26   {
27    Console.WriteLine("哈利路亚");
28   }
29  //----------------抽象方法-----------------------//
30   //抽象方法没有只有方法的定义,没有实现。
31   public abstract void Fun();
32   public abstract void Fun1();
33   public abstract void Fun2();
34  }
35  //继承抽象类的子类必须实现抽象类中的全部抽象方法
36  public class YeSu : God
37  {
38   public override void Fun()
39   {
40    Console.WriteLine("fly");
41   }
42   public override void Fun1()
43   {
44   }
45   public override void Fun2()
46   {
47   }
48  }


 5  sealed关键字 
  1如果sealed修饰类,这类不能被继承(绝育类)  pblic sealecd class(){}
  2如果sealed修饰方法,则方法不能被重写 public sealed void sing(){}
 6 interface

 为解决多继承问题而产生的特殊"类"。
 public interface 接口名
 {
  //只能写方法的定义和属性的定义(不能在接口里去实现方法或属性)
 }
 接口定义方法前面不能家public等修饰符
 在实现接口的时候不能在方法前加override关键字
 要继承类也要实现接口时候,必须把父类写前面,接口写在后面,中间都好隔开
 

View Code
 1 public class StudyInterface
 2  {
 3   public static void Main()
 4   {
 5    //上转型
 6    UStorage u = new UStorage();
 7    Phone p = new Phone();
 8    KnowUSB(u);
 9    KnowUSB(p);
10   }
11   public static void KnowUSB(IUSB usb)
12   {
13    usb.know();
14   }
15  }
16  public class A
17  {
18  }
19  public interface IUSB
20  {
21   //只能编写方法或属性的定义,不能在接口中实现
22   void know();
23  }
24  public class UStorage : A,IUSB
25  {
26   public void know()
27   {
28    Console.WriteLine("识别U盘");
29   }
30  }
31  public class  Phone : IUSB
32  {
33   public void know()
34   {
35    Console.WriteLine("识别手机");
36   }
37  }

 

posted on 2012-07-28 19:46  bergy  阅读(168)  评论(0编辑  收藏  举报