C# 的关键字系列(4 of n)

和对象类型(object type),类型转换(type conversions)打交道的关键字:

  • as
  • is
  • explicit
  • implicit
  • operator
  • sizeof
  • typeof

 

 

is and as

 

 

is : 用来判断某个对象是不是某个类型。

string str= string.Empty; 
if (str is string

}

在这里如果str 是string 的话,if 就是true。

as :将某个对象转换为某个类型。

string str= string.Empty; 
if (str is string


string as_str = str as string
if (as_str != null

}


在这里如果str 是string 对象的话,那么as_str 就不是null。

 

因为在执行is操作后,我们经常需要对对象进行类型转换。所以使用as的方式效率更高,你可以将is 理解为先进行as 操作,然后判断结果是不是null

 

 

explicit,implicit,operator

 

 

explicit:显式的

implicit:隐式的

public static explicit operator Celsius(Fahrenheit f) 

    return new Celsius((5.0f / 9.0f) * (f.degrees - 32)); 
}

这个方法的意思是Fahrenheit f 转换成Celsius 是显式的,所以 Celsius c =  f; 这句代码会抛出异常: 
C# 的关键字系列(4 of n)

正确的写法是Celsius c =  (Celsius)f;

 

public static implicit operator Celsius(Fahrenheit f) 

     return new Celsius((5.0f / 9.0f) * (f.degrees - 32)); 
}

这个方法代表Fahrenheit f 转换成Celsius 是隐式的,所以 Celsius c =  f; 这句代码正常执行,不需要转换。

 

sizeof and typeof

 

sizeof:

用于获取非托管类型的大小(以字节为单位)。 非托管类型包括下表列出的内置类型以及以下类型:

  • 枚举类型

  • 指针类型

  • 用户定义的结构,不包含任何属于引用类型的字段或属性

例如sizeof(int) 返回4. 
C# 的关键字系列(4 of n)

 

问:sizeof(string) ? 可以编译通过吗?,如果编译通过返回什么,或者该如何计算一个string的

sizeof?

C# 的关键字系列(4 of n)
答案

 

C++中的sizeof

A. 参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。

例如int类型在16位系统中占2个字节,在32位系统中占4个字节。

 

B. 参数为数组或指针。

int a[50]; 

//sizeof(a)=4*50=200; 求数组所占的空间大小

int *a=new int[50];

//sizeof(a)=4; a为一个指针,sizeof(a)是求指针的大小,在32位系统中,当然是占4个字节。

 

C. 参数为结构或类。Sizeof应用在类和结构的处理情况是相同的。但有两点需要注意,

  • 结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。
  • 没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。

这段抄自:http://www.cnblogs.com/wangliang651/archive/2006/07/18/453947.html


typeof

用于获取类型的 System.Type 对象。 typeof 表达式采用以下形式:

注意,这里的参数是类型

 

int i = 0; 
Console.WriteLine(i.GetType()); //System.Int32 
Console.WriteLine(typeof(int)); //System.Int32

 

GetType()是对象的方法,typeof 的参数是类型。

 

Visual Basic 中的TypeOf

Visual Basic 的TypeOf 有点奇怪:

C# 的关键字系列(4 of n)

 

Module Module1

    Sub Main()
        Dim t = New Test()

        Console.WriteLine(t.ReturnString())
        Console.WriteLine(TypeName(t))
        Console.WriteLine(TypeOf (t) Is Test)
        Console.WriteLine(t.GetType())

        Console.ReadLine()
    End Sub

    Class Test
        Function ReturnString() As String
            Return "Hello Visual Basic!"
        End Function
    End Class

End Module

运行结果如下:

C# 的关键字系列(4 of n)

 

var

首先为什么有了var关键字?

var custQuery = from cust in customers
                where cust.City == "Phoenix"
                select new { cust.Name, cust.Phone };

如果不用var,那应该用什么呢?

但是在开发的过程中,我发现很多人都比较喜欢这个关键字,我个人还是偏向于只在上面的这种情况和在一些能对代码阅读起帮助的地方使用。

C# 的关键字系列(4 of n)

C# 的关键字系列(4 of n)

好。

不过上面有个问题,d是int 类型,不是double类型了。

var 还可以在foreach中使用。

C# 的关键字系列(4 of n)

在这种情况下,如果可以不使用var,请尽量不要使用var,就像你不一定知道这里的control是什么类型一样,你知道control是什么类型吗??

 

dynamic

关于dynamic,我觉得没什么好说的了,请看前面写的一些文章:

 

浅谈Dynamic 关键字系列之一:dynamic 就是Object

浅谈Dynamic 关键字系列之二:调用属性,方法,字段

浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject

浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject

浅谈Dynamic 关键字系列之四:dynamic为什么比反射快

 






本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2012/12/06/2804324.html,如需转载请自行联系原作者
上一篇:myeclipse中设置文件编码


下一篇:DOM概述 选取文档元素