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)抽象类和接口直接的继承关系
不只是抽象类之间,以及和类之间有继承关系,抽象类和接口之间同样可以有继承关系。抽象类在继承接口时,可以实现接口定义的方法,也可以把该方法定义为抽象类,而不去实现。[更加复杂了]
正式开始学习C#-----V0.2
最新推荐文章于 2023-02-22 11:44:50 发布