1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
int i; long l; string s; char c; float f; bool bFlag; 1.字符、字符串 (1)unicode c='郭'; //unicode 2个字节,但不能char c='cd';哦 (2)字符串替换 s.replace("{0}",str);//把s字符串中的{0}字符串替换为 (3)转义字符 s=@"\t"; Console.WriteLine(s);//这样可以输出\t字符串,如果不加@则输出一个tab,也就是8个空格的距离空白。"\\t"效果一样 //---------------------------------------------------------------- 2.函数用法 (1)Round函数 f=Math.Round(25.123456,4);//--->25.1235,四舍五入,保留4位小数 (2)DateTime时间 string strTime=DateTime.Now.ToString();//默认是 2012/12/8 20:23:41 string strTime=DateTime.Now.ToString("yyyy-MM ^v^ dd");//2012-12 ^v^ 08,也就是数据可以按照任意形式显示 DateTime dt=DateTime.Now;//获取一个DateTime结构的数据 (3)Random随机 Random rd=new Random(); i=rd.next(100,200);//产生100~199之间的数据 (4)WriteLine Console.WriteLine("你的年龄是{0}岁",25);//{0}相当于c++的%d,大师都必须从0开始~ (5)引用参数 private static void add(ref int i,ref int j)//注意static! {;//} 调用时 add(ref i,ref j);//而不像c++只要在定义时使用&引用标记 (6)输出参数 public static void OutValues(out int i,out int j);//i和j不用初始化,这里完全就是为了弥补c\c++的缺点。 (7)数字类型参数,参数可变 static void PrintArgs(params string[] args) { for(int i=0;i<args.Length;i++)//通过Length方法 { Console.Write(args[i]+"\t"); } Console.WriteLine(); } //---------------------------------------------------------------- 3.类型转换、类型检查 (1)Parse用法 i=int.Parse('1234');//-->1234,把其他任何类型的数值转成int类型数值 (2)强制转换 i=(int)1.26; //显式转换 l=i; //隐式转换 (3)转换成字符串 s=i.ToString(); //不能直接对1234.ToString,一定要放到变量里面 s=Convert.ToString(obj,i,l,f....); (4)类型检查 is:类型转换前的兼容性检查 变量 is 数据类型,返回bool类型(常量也可以哦,例如123.0是double) as:转换过程中的类型兼容性检查 用于类型转换 obj=i; bFlag=obj is int;//True string s="Hello"; obj=s; string str=s as string;//则str="Hello" int i=s as int;//返回null 4.装箱、拆箱:值类型与Object类型之间转换 (1)装箱 System.Object obj=i;//直接赋值 (2)拆箱 i=(int)obj; //和强制转换一样 5.建立文件 (1)新建一个类 新建C#文件后,定义一个类,命名空间名要和项目的命名空间一样才可以被调用。点击保存这个新建的C#文件后,会弹出问保存咋那里,选择保存到Program.cs一样的地方,然后在解决方案资源管理器中选择添加鲜有文件。然后就直接可以使用这个新定义的类了。而在C++中一定要include这个文件,特别烦恼的就是他们的互相依存关系,在C#中不用考虑~~编译器帮我们考虑好了。C#给力! (2) 6.类的使用 (1)继承 a.继承-->定义几乎和C++一样,但不要加public private protect等限定词 文件1中 namespace Example_6_6 { class Graph { public double PI = Math.PI; public int r = 12; } } 文件2中 namespace Example_6_6 { class Circular:Graph { public double getArea() { double area = base.PI*base.r*base.r;//使用了base来调用 return area; } } } b.覆盖-->c++中的重构 继承的类中使用new方法修饰函数 public new double getArea().. (2)多态:重载、重写(虚函数) a.重载和c++一样:变量数量或者类型不一样,方法重载和操作符重载 b.重写:基类中使用virtual定义而继承重写虚函数,用关键字override class Graph { public virtual double getArea(){return 100;}//virtual } class Rectangle:Graph { public override double getArea()//override { return 120; } } (2)封闭性:新的特性 类中的某一个方法不需要被重写,甚至根本不应该被继承。 a.封闭类:关键字sealed,放在类class前就可以,则其他类不可对它进行继承。 b.封闭方法,同样放在方法最前面,即可.sealed public override double GetArea()... 7.接口:看上去很强大,不太理解如何使用 (1)创建接口 namespace CSharp_CmdPure { interface IShape { double GetArea(); double GetPerimeter(); } } (2)实现接口:要在派生类中才能实现,并且必须全部实现 namespace CSharp_CmdPure { class Rectangle:IShape { public double GetArea(){return 100;} public double GetPerimeter(){return 120;} } } (3)接口之间的继承关系 类可以继承类,接口也可以继承另外的接口。但派生类,必须实现上面继承关系中所有接口的方法。 (4)多重继承关系:逗号分隔 C#中,类不允许多重继承,即类不能继承二个以上基类(c++可以)。但类可以继承2个以上的接口,也可以在继承基类的同时继承另外的接口。 8.抽象类 (1)概念:抽象类的作用和接口类似,同样也定义了一些实现方法。与接口不同的是,其中有一些方法已经实现了。所以,从概念上来讲,抽象类是介于接口和类之间的一种特殊的类。[要晕了] 继承抽象类的派生类中,必须要实现抽象方法,并且使用override关键字重写它。 (2)使用abstract修饰class abstract class Shape//抽象类 { abstract public double GetArea();//抽象方法,当然其他正常方法都可以用 } class Rectangle:Shape { public override double GetArea(){return 100;} } (3)抽象类之间可以继承 继承抽象类的抽象类不需要实现所有抽象方法。 (4)抽象类和接口直接的继承关系 不只是抽象类之间,以及和类之间有继承关系,抽象类和接口之间同样可以有继承关系。抽象类在继承接口时,可以实现接口定义的方法,也可以把该方法定义为抽象类,而不去实现。[更加复杂了] |