和对象类型(object type),类型转换(type conversions)打交道的关键字:
|
|
|
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; 这句代码会抛出异常:
正确的写法是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(string) ? 可以编译通过吗?,如果编译通过返回什么,或者该如何计算一个string的
sizeof?
答案
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 有点奇怪:
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
运行结果如下:
var
首先为什么有了var关键字?
var custQuery = from cust in customers where cust.City == "Phoenix" select new { cust.Name, cust.Phone };
如果不用var,那应该用什么呢?
但是在开发的过程中,我发现很多人都比较喜欢这个关键字,我个人还是偏向于只在上面的这种情况和在一些能对代码阅读起帮助的地方使用。
比
好。
不过上面有个问题,d是int 类型,不是double类型了。
var 还可以在foreach中使用。
在这种情况下,如果可以不使用var,请尽量不要使用var,就像你不一定知道这里的control是什么类型一样,你知道control是什么类型吗??
dynamic
关于dynamic,我觉得没什么好说的了,请看前面写的一些文章:
浅谈Dynamic 关键字系列之一:dynamic 就是Object
浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject
浅谈Dynamic 关键字系列之三(下):ExpandoObject,DynamicObject,DynamicMetaObject
浅谈Dynamic 关键字系列之四:dynamic为什么比反射快