本章简言

上一章讲到关于项目工程开发常用的知识点,有了前面俩章的介绍之后。本章正式开始介绍关于C#的基础语法。我们都很清楚C#也是面向对象的计算机语言。而且他跟JAVA的相似度高达80%。所以很多语法点基本上是一样子。学过JAVA的人,现在开始学习C#的话。面临最大的问题是环境的不熟悉。如开发环境。同时有一点希望读者们心里要明白。如果以为看了笔者的博文就可以说学会了,那我只能说你天真了。笔者的博文只能算是一种协助而以。加速你对C#的认识和了解。并且笔者不会更深入的讲解C#,一切以入门上手为主。当然不可否认的是笔者写的知识也不一定是正确的。

基础语法之数据类型

数据类型。也就是所谓的变量。这是基础中的基础。让我们看一下C#有哪一些常用的数据类型。

C#:

int intValue = ;//跟JAVA一样子。只是C#这边有把int分为int32,int16,int64。其中int64好像就是long类型
long longValue = 2l;//跟JAVA一样子。
float floatValue = 1f;//跟JAVA一样子。
double doubleValue = 2d;//跟JAVA一样子。
string stringValue = "aomi";//C#里面字符串类型有俩种:string,String(注意头字母大写)。常用是string类型写法。String是string对应的对象类型。而且JAVA只有String类型。
char charValue = 'c';//跟JAVA一样子。
bool boolValue = false;//跟JAVA的boolean一样子。只是这里少了ean。同时C#本身也有bool对应的Boolean对象类型。
decimal decimalValue = 3.4m;//C#独有的。也是浮点数。一般用于钱相关的业务。跟float,double用法是一样子。只是这个是以M为结尾。
int? intMark = null;//可以为空的数据类型。C#独有的。在JAVA笔者没有见过
var varInt = ;//有一点像弱化类型一样子。主要是编译器会根据上下文来判断当前变量的类型。
var varString = "aomi"//同上

上面是开发时候常用数据类型的定义。我们可以看出来。只有要记住几个不同点就可以学会这边的知识点了。

1.decimal类型不同:只要明白他跟double的用法是相似的(如果要深入的话,是不一样子)。

2.string类型不同:JAVA头字母是大写。而C#却是小写。同时注意的是string类型的比较。C#用的是==和Equals方法,俩种比较方式都是比较值的(当然,非字符串是比较引用)。但JAVA却不一样子。这个你们懂的。

3.bool类型不同:少了ean。用法是一样子。

4.var的关键字:有一点像弱化类型一样子。主要是编译器会根据上下文来判断当前变量的类型。

5.数据类型?:可为空的数据类型。INT类型一般默认值为0,不可能为null。也不可能等于null。当加了?那就是不一样子。

清楚了数据类型的定义之后,就要了解一下数据类型之后转化。C#这边笔者最常用的就三种方式的转化。如下

C#:

int parseVlaue = Int32.Parse("");
int convertVlaue = Convert.ToInt32("");
int value = (int) 4.5d;

上面的代码是三种常用的类型转化的方式。关于用Parse方法相信JAVA也常看到。如Integer.parseInt。笔者不多说。中间那种方式才是C#中最常用的方法。也是JAVA中笔者没有看到的。Convert类是一个用于转化的工具类。里面包含了很多种转化方法。如何学习呢?写一下Convert.这个时候开发工具就是提示各种方法出来。这不是可以学习了吗?或是按快捷键Ctrl+J。提示窗体如下

上面的转化都是显性转化,关于隐性的转化。笔者就不多提。还有一点值得注意:1.C#有一个一般对象都会有的方法ToString。有时候这个方法会帮你转化对应的字符串。

基础语法之判断和循环语句

数据类型结束之后,便是对应的判断和循环语句了。让我们选看一下关于判断语句的用法吧。

C#:

var ifIntValue = ;
if(ifIntValue > )
{
//逻辑代码
}
else if(ifIntValue < )
{
//逻辑代码
}
else
{
//逻辑代码
} string aomi = "aomi";
switch(aomi)
{
case "aomi":
//逻辑代码
break;
default:
//逻辑代码
break;
}

显然判断语句没有什么差别。如果硬要说的话。笔者到是发现一个奇怪的结果:上面default:里面的break;C#这边不能删。删了会出错。JAVA却可以。

了解完了判断语句之后,让我们了解一下循环语句吧。同样子以带代码来看

int j = ;

while(j<)
{
//逻辑代码
} do
{ } while(j<); for(int i=;i<;i++)
{
//逻辑代码
}
string[] values = { "aa", "bb" };
foreach(string v in values)//相当于JAVA的for(变量类型 变量名 : 数组变量);
{
//逻辑代码
}

我们可以看到最后一个的不同点:JAVA是用for(变量类型  变量名  : 数组变量);而且C#是foreach(变量类型  变量名   in 数组变量)。特别注意的是这里:和 in 的细微差别。另外循环里面的break和continue的用法是不是一样子。

基础语法之数组和集合

数组的概念大家都知道。实例化的形式不管是JAVA还是C#都是一样子。实例化常用方式笔者认为有三种:

1.实例化不带初始值。

 int [] array = new  int[];

2.实例化带有初始值。

int [] list = new int[]{,,,};

上面这段代码在C#里面是通得过的。可是JAVA却不行。必须把[4]里面数值4去掉JAVA才能通过了。即是把[4]修改成[]。但是C#里面去不去数值4都可以通过。

3.匿名实例化数组。俩边通得过。到是这一点让笔者没有想到的。

String[] values = { "aa", "bb" };

集合类可以说是编程中最常用的一个部分。C#集合类可以说都是在System.Collections命名空间下。那们大部分是实现于三个接口类:IList接口、ICollection接口、 IEnumerable接口、IDictionary接口。笔者喜欢把集合类分为俩种:一是集合;一种是字典。

IEnumerable接口:大白话讲这个接口就是跟foreach有关系。迭代集合时候需要实现的接口。笔者一直不知道如何去说明这个接口。类似于JAVA的Iterator接口。

ICollection接口:获得集合类的数量和复制一个数组类型。

IList接口:类似于JAVA的List接口的功能。

IDictionary接口:类似于JAVA的Map接口的功能。

那么C#这边常用的实例化用法如下

IList strList = new ArrayList();
ArrayList strList = new ArrayList();

ArrayList类算是集合类常用的一个类。对于获得集合里面的一个元素的话。C#这边略有一点不同。

IList strList = new ArrayList();
object obj = strList[0];

strList[0]代码就是相当于JAVA的strList.get(0)。那么删除呢?

IList strList = new ArrayList();
strList.RemoveAt();

上面是删除中的一种。还是有一种就是传一个集合对应的值进行删除。最后看一下增加。

int aaa = ;
IList strList = new ArrayList();
strList.Add(aaa);

上面笔者说喜欢把集合类分为俩种,上面是集合部分。接下来让我们看一下字典部分。字典相信大家都知道 一个KEY就有对应的一个VALUE。即是键值对。

IDictionary dic = new Hashtable();
dic.Add("aomi", );

上面就是实例化一个字典并增加对应的数据。一看就明白如何增加数据了。

IDictionary接口里面有俩种很重要的属性成员:Keys和Values。分别用于存放键的集合和值的集合。所以我们可以根据这俩个属性成员做很多事情。

IDictionary dic = new Hashtable();
foreach(object keyObj in dic.Keys)
{
Console.WriteLine(dic[keyObj]);
}

跟上面的集合的获得方式有一点像了。dic[keyObj]相当于dic.get(key)。当然我们也可以直接把Values做迭代。笔者就不多说了。至于删除就是调用Remove方法传入对应的键参数。

上面的知识是很早以前常用的一些写法。现在版本的变化。对应的很多常用的知识也代替了。不过写法都不会变。

ArrayList类被List<T>类取代。

Hashtable类被Dictionary<TKey,TValue>类取代。

上面和T、TKey、TValue都是泛型。下面就是对应的实例化。

IList strList = new List<object>();
IDictionary dic = new Dictionary<object,object>();

集合类除了上面讲到的之外。还有Queue类、SortedList类、 Stack类等。笔者这里就不多介绍了。有心的朋友可以去找一下资料。

注意:在我们应用中常常会讲到线程安全的集合类:

1.ConcurrentQueue

2.QueueConcurrentStack

3.ConcurrentBag

4.ConcurrentDictionary

5.BlockingCollection

本章总结

本章主要是对C#基础语法进行讲解。笔者相信对于有经验的JAVA开发人员来讲很简单的。同时我们也可以看到JAVA和C#之间的语法点差不多。更多只是在写法的不同而以。

Java进击C#——语法之基础的更多相关文章

  1. Java进击C#——语法之ADO.NET

    本章简言 上一章讲到关于C#语法的基础部分.了解相关的基础部分之后我们就要去了解一下C#是什么样子访问数库的.C#把访问数据库这一部分的知识点叫作ADO.NET.即是JAVA常常讲到的JDBC这一部分 ...

  2. Java进击C#——语法之IO操作

    本章简言 上一章我们对线程同步进行讲解.了解如何去处理可能发生的脏数据.而本章就要讲有关于C#在读取IO文件的时候,常常用到的操作类.这一章的内容会比较少.但是笔者还是总结出来让读者们有一个学习的方向 ...

  3. Java进击C#——语法之多线程

    本章简言 上一章中笔者对C#一些独有的语法点进行讲解,相信也可以看C#的一些神奇之处.那么本章主要是放在多线程这方面的知识.不管是C#还是JAVA在开发过程或多或少都会用到关于多线程的编程.当然笔者不 ...

  4. Java进击C#——语法之知识点的改进

    本章简言 上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知 ...

  5. Java进击C#——语法之面向对象

    本章简言 上一章笔者讲到关于ADO.NET相关的知识,知道了如何去访问数据库.本章将来讲关于面向对象的思想.不管在JAVA还是在C#面向对象思想的重要性都是占了一个很大的成份.往往他就像呼吸一样子,更 ...

  6. Java进击C#——语法之线程同步

    上一章我们讲到关于C#线程方向的应用.但是笔者并没有讲到多线程中的另一个知识点--同步.多线程的应用开发都有可能发生脏数据.同步的功能或多或少都会用到.本章就要来讲一下关于线程同步的问题.根据笔者这几 ...

  7. 【Java基础】Java中的语法糖

    目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...

  8. Java进击C#——前言

    本章简言 记得三年前笔者来到现在的公司的时候,公司人口不出十个人.那个时候笔者刚从日本回来,想在福州.厦门.青岛找一个合适自己发展的机会.最后我的一个福州的朋友打电话希望我能过去帮他,跟他一起创业.这 ...

  9. Java进击C#——应用开发之Linq和EF

    本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知 ...

随机推荐

  1. 报文解析及CRC类

    /// <summary> /// 报文解析转换类 /// </summary> public class DatagramConvert { public static En ...

  2. 字典NSDictionary以及NSMutableDictionary的用法总结

    做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...

  3. Jquery 仿 android Toast效果

    JS代码如下: /** * 模仿android里面的Toast效果,主要是用于在不打断程序正常执行的情况下显示提示数据 * @param config * @return */var Toast = ...

  4. python网页抓取练手代码

    from urllib import request import html.parser class zhuaqu(html.parser.HTMLParser): blogHtml = " ...

  5. Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 有关如何在 Jexus 中进行部署,请 ...

  6. Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor

    在Visual Studio中创建混合移动应用程序的一个解决方案是使用Xamarin Portable Razor工具,这是ASP.NET MVC API针对移动设备的一个轻量级实现.Xamarin编 ...

  7. ABP理论学习之SignalR集成

    返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易.查看SignalR文档获 ...

  8. ECMAScript 6入门

    预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中.目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数 ...

  9. 新功能发布!Markdown写博客!

    有一种神奇的语言,它比html还简单,它巧妙地将内容与格式整合在一起--它就是Markdown. 现在我们实现了博客对Markdown的内置支持,可以让您轻松地在园子里用这个神奇的语言写博客! &qu ...

  10. OpenGL快问快答

    OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...