WEB开发网
开发学院软件开发C语言 由C++转向C#需要注意的问题 阅读

由C++转向C#需要注意的问题

 2009-04-11 08:25:15 来源:WEB开发网   
核心提示: 另一方面,由于结构比类的效率要高,由C++转向C#需要注意的问题(3),因此它非常适合于创建轻型对象,因此,编译器将自动将整型变量封装在一个对象的实例中,当WriteLine调用ToString时,如果它的缺点对你的软件没有影响,使用结构比使用类效率要高得多

另一方面,由于结构比类的效率要高,因此它非常适合于创建轻型对象。因此,如果它的缺点对你的软件没有影响,使用结构比使用类效率要高得多,尤其是对于小对象而言。

所有的一切都是对象

在C#中,所有的东西都是由继承Object得到的,包括创建的类和int、structs等值类型的变量。Object类提供了一些有用的方法,例如ToString,使用ToString的一个例子是与System.Console.WriteLine一起使用,它可以接受一个字符串和许多对象。与使用printf语句不同,要使用WriteLine,需要提供代换变量。假设myEmployee是用户定义的Employee类的一个实例,myCounter是用户定义的Counter类的一个实例: 

Console.WriteLine("Theemployee:{0},thecountervalue:{1}",

myEmployee,myCounter); 

其中的WriteLine会调用每个对象的Object.ToString方法,替换作为参数返回的变量。如果Employee类不覆盖ToString,就会调用缺省的实现(由System.Object继承得到的),它将把类的名字作为一个字符串返回。Counter会覆盖ToString,返回一个整型的变量,因此,上面代码的输出为: 

Theemployee:Employee,thecountervalue:12 

如果向WriteLine传递一个整型变量会发生什么情况呢?由于不能对整型变量调用ToString,编译器将自动将整型变量封装在一个对象的实例中。当WriteLine调用ToString时,对象就会返回表示整型变量值的字符串。下面的代码就说明了这个问题: 

类的使用

usingSystem;
//不覆盖ToString的类
publicclassEmployee
{
}
//覆盖了ToString的类
publicclassCounter
{
privateinttheVal;
publicCounter(inttheVal)
{
this.theVal=theVal;
}
publicoverridestringToString()
{
Console.WriteLine("CallingCounter.ToString()");
returntheVal.ToString();
}
}
publicclassTester
{
publicstaticvoidMain()
{
//创建类的实例
Testert=newTester();
//调用非静态成员
//(mustbethroughaninstance)
t.Run();
}
//演示调用ToString的非静态方法
publicvoidRun()
{
EmployeemyEmployee=newEmployee();
CountermyCounter=newCounter(12);
Console.WriteLine("Theemployee:{0},thecountervalue:{1}",
myEmployee,myCounter);
intmyInt=5;
Console.WriteLine("Herearetwointegers:{0}and{1}",17,myInt);
}
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:转向 需要 注意

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接