走进C#,走进linq

过年在家,无所事事,拾起从没耐心看的C#入门,用三天的时间系统的翻了一遍(除了web)。又在代码上试了一把,有些心得,留于此处,以作纪念。

 

在C#中,没有指针,这让c++启蒙的我很不习惯。仔细研读,在C++中,有值类型和引用类型,其中的引用类型,就近似于c++中的指针。不过是不声明为指针。

写到这里,忽然泛起疑问,在不是传参的情形下,值类型如何表示为指针。仔细思索,如果不是为了传参,值类型有必要使用指针么。

想到这里,思索一下,c++中指针的用途:地址,数组,以及函数指针。

数组和函数指针在c#中都有。其中函数指针在c#中表现为委托。剩下的,就只有地址了。而c++中,用到数据地址的地方,不计数组,就是传参了。传参有引用类型ref标识。c#委员会(不知道是不是这个机构)想的果然很是周到微笑

 

c#中,有一种类型叫作可空类型,就是使值类型的值也可为null,这种类型的标识方式是int? ,很是神奇。而有了这种类型,原本在设计中的很多工作都轻松了。想必你也有这种时候吧,n个成员变量,每个成员变量都要配一个bool类型的变量以标识这个变量是否启用。这是非常痛苦的事儿。而在c#里,引进了可空变量,于是问题轻松了。此外,??操作符的引入,进一步简化了代码。你知道??操作符么?这是一个二元操作符,如果第一个操作数非空,那就使用第一个操作数,如果第一个操作数为空,那就采用第二个操作数。没搞好着色插件,随便写几行意思一下。

在C++中,我们要写

int n1,n2,n3,n4,n5……nx;

bool b1, b2, b3, b4, b5……bx;

而在c#中,

int? n1, n2,n3,n4,n5……nx;

而为了判断是否可用以给予默认值,

c++中:

set(b1 ? n1 : 0);

c#中:

set(n1 ?? 0);

c#中要求先赋初值后使用,增强了安全性。我们在c++中也是这样要求的,只不过在c#中,由人为要求变成了强制要求。

 

c#的界面开发。

听说c#的界面开发非常方便,研究后大失所谓。不知道是我手生还是理解有误。

创建界面,自动生成的代码中,混杂了大量的中文变量名。应不应该使用中文变量名的问题暂且抛开,就可读性而言,不可理喻。

需要一个控件一个控件的改name。当然了,这在vc中也是需要的,我们要在vc的设计界面一个一个的改ID,改属性。

在c#中的界面,不再是由资源完成。而是将界面与代码直接对应。这很神奇。所见即所得?html里[table][/table]于是真的有了一个table。

更神奇的是消息,不用消息映射了,直接把消息处理函数交给接收消息的控件。或许如果使用c#,我不需要在诸多控件的消息网中来回跟踪了。我喜欢c#中的消息。

 

linq 与数据库

linq,又一个很神奇的东东。可以到处查。干警出身吧。

查对象,查数据库,查xml。用法简单,语法简单,配合c#的类型推断和匿名类型,λ表达式,我只能说太帅了。

var CheckAllMyWant = from c in anyCollect

                                where c.anyKey == someValue

                                 select new {Key = c.Key, Key1 = c.Key1, KeyN = c.KeyN};// 不要1~N之间了。。

foreach(var myWant in CheckAllMyWant)

{

Use(myWant.Key);

Use(myWant.Key1);

Use(myWant.KeyN);

// Use(myWant.Key2); 这将导致一个错误。

}

 

第一句查询又可写为

var CheckAllMyWant = anyCollect.where(c => c.anyKey == someValue).select(c => new{c.Key, c.Key1, c.KeyN});

 

 

数据库

研究了sql server的用法,怎么创建sql数据库,编辑,关系等等。因为以前都是用access,有些东西搞了半天才搞明白。标记一下。

在sql中,建立关系图后,要将关系图上的表相关联,需要用拖的。冰冻找了半天,都没找见建立关系的命令菜单什么的,上网一查,原来一拖就好。

在sql中,要将一列设为自动编号,是用的标识规范这一项属性,而为了使这一项属性生效,又要先在表属性而设定标识列为需要设为自动编号的这一列。

为了找到在sql server里怎么创建数据库,在开始菜单里找了老半天,又到网上下了个什么sql server studio的,最后发现在vs里,从vs的服务器资源管理器里创建。

在c#里,当创建好了数据库,导入工程,就会自动生成对应的数据库封装代码,使得数据库操作变得异常简单。我又得说,这很神奇。

 

困了,就到这里。

c#以后如果会用到,或许会进一步研究,如果工作中不用到,那大概就研究到这里了,除非什么时候又有这个闲心。

 

写日志是为了复习,学而时习之,必有所得,孔夫子诚不欺我。

最后引用屈原的一句话,路漫漫其修远兮,吾将上下而求索。

2012年初,小y。

posted @ 2012-02-07 22:54  杨海龙  阅读(2625)  评论(0编辑  收藏  举报