.NET,你真的 知道了吗
搞清自己是干什么的
有人问你是做什么的,回答是:"我是做,NET开发的",有的人也会问:"那.NER.是什么?"刚开始我认为是一个开打工具,后认为是一个平台,一个软件环境.
现在窝火说:.NET是一个概念,是一种构想,或者说是微软的一个梦想.
.NET 几个特性
一次编译,到处运行. 首先要说的就是.NET Framework的平台无关性.
编程语言不再是面试的瓶颈.
自动内存管理,让我们放心编程.
基类库---.NETd开发宝藏.
变量
变量代表存储地址.
常量
在变量前加上关键字const,就可以指定为常量.
流程控制
条件语句
if语句,switch语句
循环语句
for循环,whlie循环,do...while循环,foreach循环.
跳转语句
goto语句,break语句,continue语句,return语句.
int32.TrParse().int32.Parse().ConvertToint32()比较
>ConvertToint32()在null是不抛出异常,二十返回零.
>int32.Parse()会抛出异常
>int32.TrParse()不会抛出异常,会返回true或false来说明解析是否成功.如果解析错误,则out调用方将会得到零值.
.NET面向对象之门
继承,封装,多态
隐藏基类成员C#使用new修饰符来实现隐藏基类成员,
new有三种实现: 1.隐藏父类成员 2.实例化 3.泛型
密封类和密封方法(sealed )
sealed 不能继承
interface | 方法不能实现 | 继承子类全部重写 | |
adstrace | 不能实例化 | 方法能实现 | 继承子类选择性重写 |
委托---"任务书"
简单的理解委托就如一个"中介"
什么是委托,为什么要使用委托
我正在埋头苦写程序,突然想喝水,但是又不想自己去掉杯水而打断自己的思路,于是我就想让女朋友去给我倒水。她去给我倒水,
首先我得让她知道我想让她干什么,通知她之后我可以继续写自己的程序,而倒水的工作就交给了她。这样的过程就相当于一个委托。
在程序过程中,当程序正在处理某个事件的时候,我需要另外的程序代码去辅助处理一些事情,于是委托另一个程序模块去处理,
而委托就可以达到这种目的,我可以利用委托通知另外的程序模块,该去调用哪个函数方法。委托其实就起到了这样一个作用,
将函数签名传递到了另一个函数中。或许这样讲还是有些模糊,看看后面的具体实例。
委托的定义
delegatevoid ConvertNum(string result);
上面是定义两个委托的例子,其实很简单。声明一个委托使用delegate关键字,上面分别是定义的带返回值的委托和不带返回值的委托,
两个委托都有传递参数,当然也可以不传递参数。其实委托也是一个类,委托派生为System.MulticastDelegate,而System.MulticastDelegate
又继承System.Delegate,如果你知道这个也就明白委托其实是一个特殊的类。
委托总结
委托是一种特殊的对象类型,它定义了方法的类型,使的可以将方法当做另一个方法的参数来进行传递.
反射----"解剖"
简单理解反射就是一把手术刀.
反射就是把一个类(不管你是已知还是未知),可以反射出它的属性、方法、变量等等。
比如一个类
public class A
{
...
}
我们并不知道它里面有些什么,那么我们可以使用反射了。
Type t = A.GetType();
这是类A的Type实例
然后,通过GetProperties()这个方法,可以找出所有类A里面的“属性”,通过GetMethod()这个方法,可以找出所有类A里面的“方法”!
例如:PropertyInfo[] proInfo = t.GetProperties(); //找出所有的属性,这是一个集合。
var methodInfo = t.GetMethod(new Type[] { }); //找到无参数的构造方法
找出之后,你还可以调用,比如属性取值,你可以再继续使用proInfo[0].GetValue(...)这个方法来取第0号属性的值。
调用方法是使用Invoke()方法来调用,比如调用这个类的构造方法:object a = methodInfo.Invoke(); 这样就得到了类A的实例。
还可以找Attribute,和判断类型。
还有更多的东西,总之语言中的所有东西,都可以和反射一一对应。详细你参考微软的MSDN,关于System.Reflection命名空间。
.NET开发的几把小刀
@符号妙用
一 字符串中的用法
字符@表示,其后的字符串是个“逐字字符串”(verbatim string)。
@只能对字符串常量作用。
1.用于文件路径
以下是引用片段: string s_FilePath ="C:\\Program Files\\Microsoft.NET\\test.txt"; |
相当于
以下是引用片段: string s_FilePath =@"C:\Program Files\Microsoft.NET\test.txt"; |
2.用@表示的字符串能够跨越数行。用于在CS中写JS或SQL代码比较方便。
以下是引用片段: string s_MultiRows = @"Line1 Line2 Line3"; string s_JavaScript = @" "; |
二 标识符中的用法
在 C# 规范中, @ 可以作为标识符(类名、变量名、方法名等)的第一个字符,以允许C# 中保留关键字作为自己定义的标识符。
如
以下是引用片段: class @class { public static void @static(bool @bool) { if (@bool) System.Console.WriteLine("true"); else System.Console.WriteLine("false"); } } class Class1 { static void M() { clu0061ss.stu0061tic(true); } } |
注意,@ 虽然出现在标识符中,但不作为标识符本身的一部分。
因此,以上示例,定义了一个名为 class 的类,并包含一个名为 static 的方法,以及一个参数名为了 bool 的形参。
这样,对于跨语言的移植带来了便利。因为,某个单词在 C# 中作为保留关键字,但是在其他语言中也许不是。
#define
使用 #define 定义符号。 当您将符号用作传递给 #if 指令的表达式时,此表达式的计算结果为 true,如下例所示:
# define DEBUG
符号可用于指定编译的条件。 可以使用 #if 或 #elif 来测试符号。 还可以使用 conditional 特性执行条件编译。
可以定义符号,但是无法对符号赋值。 #define 指令必须在使用任何不是预处理器指令的指令之前出现在文件中。
也可以用 /define 编译器选项来定义符号。 可以用 #undef 来取消定义符号。
用 /define 或 #define 定义的符号与具有同一名称的变量不冲突。 即,不应将变量名传递到预处理器指令,并且只能用预处理器指令计算符号。
用 #define 创建的符号范围是在其中定义该符号的文件。
如以下示例所示,您必须将 #define 指令置于文件的顶部。
C# #define DEBUG //#define TRACE #undef TRACE using System; public class TestDefine { static void Main() { #if (DEBUG) Console.WriteLine("Debugging is enabled."); #endif #if (TRACE) Console.WriteLine("Tracing is enabled."); #endif } } // Output: // Debugging is enabled.