第二章
1.标识符
标识符是一种字符串,且区分大小写
特点:
1.字母和下划线可以用在任何位置(a-z、A-Z、_)。【下划线可以开头】
2.数字不可以放在首位,可以放在其他任何位置。
3.@只允许放在标识符的首位,虽然允许使用但是不推荐常用。
延伸:[@在C#中的用法:
1.忽略转义字符
例如
string fileName = "D:\\文本文件\\text.txt";
使用@后
string fileName = @"D:\文本文件\text.txt";
2.让字符串跨行
例如
string strSQL = "SELECT * FROM HumanResources.Employee AS e"
+ " INNER JOIN Person.Contact AS c"
+ " ON e.ContactID = c.ContactID"
+ " ORDER BY c.LastName";
使用@后
string strSQL = @"SELECT * FROM HumanResources.Employee AS e
INNER JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
ORDER BY c.LastName";
3.在标识符中的用法
C#是不允许关键字作为标识符(类名、变量名、方法名、表空间名等)使用的,但如果加上@之后就可以了
例如
public static void @static(int @int)
{
if (@int > 0)
{
System.Console.WriteLine("Positive Integer");
}
else if (@int == 0)
{
System.Console.WriteLine("Zero");
}
else
{
System.Console.WriteLine("Negative Integer");
}
}
2.关键字
关键字是对编译器具有特殊意义的预定义保留标识符。它们不能在程序中用作标识符,除非它们有一个 @ 前缀。例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
image具体用法与释义
https://www.cnblogs.com/LS520/p/7115435.html
https://msdn.microsoft.com/zh-cn/library/x53a06bb(VS.80).aspx
3.代码的注释
image第三章:类型、存储和变量
1.预定义类型
image image1.三种非简单类型:
string:是一个Unicode字符数组
object:是所有其他类型的基类
dynamic:使用动态语言编写的程序集时使用
2.简单类型-11种数值类型
3.简单类型-非数值类型:char bool
2.dynamic与var的区别
var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的值,而dynamic则可以不提供,它是在运行时才确定类型
1.var声明一个局部变量只是一种简化语法,它要求编译器根据一个表达式推断具体的数据类型
2.var只能用于声明方法内部的局部变量,而dynamic可用于局部变量,字段,参数
3.表达式不能转型为var,但能转型为dynamic
4.必须显式初始化用var声明的变量,但无需初始化用dynamic声明的变量
例:static void Main(string[] args)
{
//var 在编译阶段已经确定类型
var number = 3;
//dynamic在编译期间不进行任何的类型检查,而是将类型检查放到了运行期
dynamic dyn = 3;
dyn = "hello world";
//runtime eror
//字符串没有 "fn不存在的方法" 的方法,但在语法检查时通过,不会提示语法错误
var s = dyn.fn不存在的方法();
Console.ReadKey();
}
var实际上是编译期抛给我们的“语法糖”,一旦被编译,编译期会自动匹配var 变量的实际类型,并用实际类型来替换该变量的申明,这看上去就好像我们在编码的时候是用实际类型进行申明的。而dynamic被编译后,实际是一个 object类型,只不过编译器会对dynamic类型进行特殊处理,让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期。
3.C#中int和System.Int32理解总结
int是System.Int32的别名,但是存在争议
4.什么是委托?
委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递。委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个或多个方法的地址,而不是数据。
委托虽然看起来像是一种类型,但其实定义一个委托,是定义了一个新的类。
下面这行代码,定义了一个委托,使用ILDasm.exe查看其生成的IL代码如图所示:
//定义委托,它定义了可以代表的方法的类型,但其本身却是一个类publicdelegateintmethodDelegate(stringstr);
image由图中红色框线中可以看出,.NET将委托定义为一个密封类,派生自基类System.MulticastDelegate,并继承了基类的三个方法。
2.委托与函数指针的区别?
1、安全性:C/C++的函数指针只是提取了函数的地址,并作为一个参数传递它,没有类型安全性,可以把任何函数传递给需要函数指针的地方;而.NET中的委托是类型安全的。
2、与实例的关联性:在面向对象编程中,几乎没有方法是孤立存在的,而是在调用方法前通常需要与类实例相关联。委托可以获取到类实例中的信息,从而实现与实例的关联。
3、本质上函数指针是一个指针变量,分配在栈中;委托类型声明的是一个类,实例化为一个对象,分配在堆中。
4、委托可以指向不同类中具有相同类型返回参数和签名的函数,函数指针则不可以。
5.** C#中的委托是什么?事件是不是一种委托?**
答:委托本质上是一种“方法接口”,它相当于C/C++中的函数指针,当然它比函数指针安全,在C#中通常用于事件处理。
事件不是委托,不过由于事件的性质决定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托。
网友评论