Spring.Net

C#基础技能培训-C#图解教程(第四版)

2018-07-19  本文已影响0人  小米或者黄大仙_fcb5

第二章

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 image

1.三种非简单类型:

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#中处理事件的逻辑都包装为委托。

6.值类型与引用类型&堆和栈

https://www.cnblogs.com/zd1994/p/4424329.html

上一篇 下一篇

猜你喜欢

热点阅读