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; 这句代码会抛出异常: 
12EE38AA9CC74DEF8F2CDD8EFF2D63F3

正确的写法是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. 
7EC71901268C4489BD82BBE49CD5CA37

 

问: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 有点奇怪:

image

 

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

运行结果如下:

4C8E1BA58A5A442694C5B0165477A9CE

 

var

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

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

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

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

clipboard

3F2B5779F769447BA0F07204A51C23D8

好。

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

var 还可以在foreach中使用。

5FBB2D98CBD94C288F337D8346E52D3A

在这种情况下,如果可以不使用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,如需转载请自行联系原作者
目录
相关文章
|
C#
30.C# 关键字 this初步学习
30.C# 关键字 this初步学习
106 1
|
开发框架 .NET 编译器
C# 9.0中的静态匿名函数:引入static关键字的新用法
【1月更文挑战第15天】C# 9.0为匿名函数带来了一个新的修饰符static,允许开发者明确指定匿名函数不会捕获其包含作用域中的任何变量。这一特性增强了代码的性能和可读性,同时减少了因不小心捕获变量而导致的潜在错误。本文将详细探讨C# 9.0中静态匿名函数的语法、使用场景以及它们如何影响代码的性能和安全性。
|
C#
28.c#关键字base初步学习
28.c#关键字base初步学习
92 0
|
C#
27.c#关键字sealed修饰类
27.c#关键字sealed修饰类
168 0
|
SQL 开发框架 .NET
EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
97 0
|
12月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
143 8
|
C# 索引
C#中的virtual和override关键字
C#中的virtual和override关键字
114 3
|
开发框架 .NET C#
【Azure Developer】C# / .NET 静态函数中this关键字的作用
在C#中,`this`关键字用于扩展方法,允许向已有类型添加功能而不修改其源代码。扩展方法必须在静态类中定义,且第一个参数使用`this`修饰,如`public static XElement AcquireElement(this XContainer container, string name, bool addFirst = false)`。这种方式增强了代码的可读性和类型的安全性,尤其在处理第三方库时。
117 2
|
存储 编译器 C#
C#关键字相关面试题
C#关键字相关面试题
138 0
|
开发框架 .NET C#
【Azure Developer】C# / .NET 静态函数中this关键字的作用
【Azure Developer】C# / .NET 静态函数中this关键字的作用