您的位置:首页 > 编程语言 > C#

《C#高级编程》 读书心得1--核心C# 几点你可能没注意,但很基础的小东西。

2012-10-27 15:32 357 查看
这是本系列读书心得第一篇。

其实所谓核心C#也就是C#的语法基础,相信大家应该已经非常熟悉了,在这里说一下在书中看到,大家可能平时没有太注意到的。此篇比较基础,也是第一次写读书心得,请勿喷啊。

变量以及其作用域。

首先声明变量:可以直接用int i; 其实它是声明一个名为i 的System.Int32的一个实例。 像int, long这样的关键字都是指向.NET预定义类型,也就是说用他们声明的变量是他们所指向的.NET预定义类型的一个实例。在.net中一共有15个这样的预定义类型,13个值类型,2个引用类型(object和string)。如int 对应的System.Int32, long对应System.Int64。 就像大学的时候我们C语言的老师一直都说int变量的值范围为-32768~32767,是因为当时的C语言编译环境为16位。 还要强调一点就是string字符串在C#中为引用类型,也就是说一个string变量是存储在托管堆上的,而像int这样的值类型是存储在堆栈上。

我们在int上按F12跳转到定义就会看到它其实是一个结构体:public struct Int32, 所一它存储在堆栈上,而string的定义是public sealed class String是一个类。

在定义一个string a后,并没有为其初始化a的值为null,而int a后a默认为0。 再有string a="123" 声明了一个string类型,然后对其再次赋值a="456",会再次创建一个值为456的实例,而不是修改值为123的实例。int a=9之后int b=a 这样在内存中会生成两个值为9的int结构体实例在堆栈中。还有bool变量只接受true或者false,而不会接受0或者1不会对其隐式类型转换。bool变量的默认值为false。

关于int对应System.Int32,bool对应System.Boolean等其实都是结构,他们都是继承于System.ValueType, 而System.VauleType又继承与System.Object. 所以他们的实例都可以进行ToString()这样的操作。String就直接继承与System.object。

关于变量的作用域有这样一个有趣的事,请看下面两段代码

class Program1
{
private static void Main(string[] args)
{
int j = 20;
for (int i = 0; i < 10; i++)
{
int j = 30;
Console.WriteLine(j + 1);
}
}
}


class Program2
{
private static int j = 20;
static void Main(string[] args)
{
int j = 30;
Console.WriteLine(j);
return;
}
}


第一段代码运行后会报错,变量j重复定义。

而对于第二段,有人也会认为他会报错,但运行后会输出变量j 为30。 这是因为变量声明在类中,C#就认为它为类的字段,Main方法中的j为局部变量。在main方法中声明j局部变量后类中的字段j被隐藏,所以编译成功,如果要类级别上的j可以用Program2.j。但为了代码的可读性我们在代码中避免这样的写法。

关于常量 const 和readonly的区别。

先说常量,常量必须在声明时初始化,之后不可修改,常量的值必须在编译时就可以计算出来,不可以用一个变量中提取出的值来初始化常量。常量是静态的,但要是加上static关键字会报错。

而只读字段readonly,它要比const常量要灵活,他一般在生成实例,在构造函数中初始化,实例生成后其值也就不可变化了,所以自读字段的值只要在生成实例之前能够计算出来就是可以的。

预处理指令

书中列举了很多预处理指令,有很多之前都没有用过,但相信应该都有用过#region #endregion 去折叠一段代码。这里要说明一下#if DEBUG #else #endif(请注意,在C#预指令里是也是区分大小写的)。请看下段代码。

static void Main(string[] args)
{
Console.WriteLine("Always write");

#if DEBUG
Console.WriteLine("Write When Debug");
#else
Console.WriteLine("Write When Release");
#endif

Console.ReadLine();

return;

}


  运行的话会看到效果,当选择DEBUG 模式进行调试的话,DEBUG就会为真,当选择Release的话,DEBUG就会为假。当然可能有的版本VS会要进行一下设置,右键点击项目,选择属性,“生成”选显卡里,选定“定义DEBUG常量”。这样DEBUG常量才会生效。此方法在调试一些登陆后后才可见的功能比较有用,调试的时候谁也不想每次登录这么麻烦吧。






本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: