博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 的关键字系列(4 of n)
阅读量:7208 次
发布时间:2019-06-29

本文共 2667 字,大约阅读时间需要 8 分钟。

和对象类型(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; 这句代码会抛出异常:

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

 

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

sizeof?

答案实际上计算一个引用类型的size 是没有意义的。具体可以参考这篇文章:http://www.codeproject.com/Articles/97711/sizeof-vs-Marshal-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,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。

这段抄自:

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 ClassEnd 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,我觉得没什么好说的了,请看前面写的一些文章:

 

 

有人说第一篇是误人子弟,误就误吧。。

你可能感兴趣的文章
【吐槽】VS2012的安装项目只能用InstallShield Limited Edition
查看>>
win7重装系统时,使用PE工具箱进入系统看到的“C盘变成0.2G,D盘变成48G左右”这是什么回事?...
查看>>
JQuery URL的GET参数值获取方法
查看>>
关于Char* ,CString ,WCHAR*之间的转换问题
查看>>
第十二天--Property List和NSUserDefaults
查看>>
JS Bin Tips and Bits • About
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q40-Q44)
查看>>
nodejs发展
查看>>
Fragment过度动画分析一
查看>>
UBI文件系统简介
查看>>
《现代操作系统》精读与思考笔记 第一章 引论
查看>>
System.out.print实现原理猜解
查看>>
每日英语:The Invasion of the Online Tutors
查看>>
codepage IMLangCodePages
查看>>
Leetcode: Valid Parentheses
查看>>
JavaScript Structure
查看>>
java 流媒体服务器Red5 FQA
查看>>
mysql--SQL编程(关于mysql中的日期) 学习笔记2
查看>>
jquery 请求jsp传递json数据的方法
查看>>
Repeater绑定事件ItemDataBound中获取数据库中数据
查看>>