一、C#简介

  C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。
  C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

二、创建一个新的C#工程

  开发工具:Visual Studio (VS)

  1、启动 Visual Studio,在菜单栏上选择 File -> New -> Project,从模板中选择 Visual C#,然后选择 Windows,选择 Console Application,为您的项目制定一个名称,然后点击 OK 按钮;
  2、新项目会出现在解决方案资源管理器(Solution Explorer)中,在代码编辑器(Code Editor)中编写代码,点击 Run 按钮或者按下 F5 键来运行程序。会出现一个命令提示符窗口(Command Prompt window),显示 输出结果。

三、C# 代码

  using System;
  namespace HelloWorldApplication
  {
    /* 类名为 HelloWorld */
    class HelloWorld
    {
      /* main函数 */
      static void Main(string[] args)
      {
        /* 我的第一个 C# 程序 */
        Console.WriteLine("Hello World!");
        Console.ReadKey();
      }
    }
  }
  1.using System:using 关键字用于在程序中包含 System 命名空间,一个程序一般有多个using 语句;

  2.namespace声明:一个 namespace 是一系列的类,HelloWorldApplication 命名空间包含了类 HelloWorld;

  3.class 声明:类 HelloWorld 包含了程序使用的数据和方法声明,类一般包含多个方法,方法定义了类的行为,在这里HelloWorld 类只有一个 Main 方法;

  4.Main 方法:是所有 C# 程序的 入口点,Main 方法说明当执行时 类将做什么动作,Main 方法通过语句 Console.WriteLine("Hello World"); 指定了它的行为。

  5.WriteLine 是一个定义在 System 命名空间中的 Console 类的一个方法,该语句会在屏幕上显示消息 “Hello,World!”;

四、C# 基本语法
  1.using 关键字
    在任何 C# 程序中的第一条语句都是:using System
    using 关键字用于在程序中包含命名空间,一个程序可以包含多个 using 语句

  2. class 关键字
    class 关键字用于声明一个类

  3. C# 注释
    多行注释以 /* 开始,并以字符 */ 终止,如下所示:
    /* This program demonstrates
     The basic syntax of C# programming
     Language */
    单行注释是用 '//' 符号表示。例如:
    //end class Rectangle

  4.成员变量: 变量是类的属性或数据成员,用于存储数据;
     成员函数: 函数是一系列执行指定任务的语句,类的成员函数是在类内声明的;
     标识符: 标识符是用来识别类、变量、函数或任何其它用户定义的项目。

  5.C#关键字
    关键字是 C# 编译器预定义的保留字,这些关键字不能用作标识符

五、C# 数据类型

  在 C# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types)

  1.值类型(Value types)

    值类型(Value types):

bool 布尔值
byte 8 位无符号整数
char 16 位 Unicode 字符 
decimal 128 位精确的十进制值
double 64 位双精度浮点型
float 32 位单精度浮点型
int 32 位有符号整数类型
long 64 位有符号整数类型
sbyte 8 位有符号整数类型
short 16 位有符号整数类型
uint 32 位无符号整数类型
ulong 64 位无符号整数类型
ushort  16 位无符号整数类型

2.引用类型(Reference types)

  引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。

  内置的引用类型有:object、dynamic 和 string

  -> 对象(Object)类型

    对象(Object)类型 是 C# 中所有数据类型的终极基类Object 是 System.Object 类的别名。所以对象(Object)类型可以
被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

    装箱操作: 当一个值类型转换为对象类型时
    拆箱操作: 当一个对象类型转换为值类型时

    object obj;
    obj = 100; // 这是装箱

  -> 动态(Dynamic)类型
    可以存储任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的声明动态类型的语法:dynamic <variable_name> = value;

    例如:dynamic d = 20;
    动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的

  ->字符串(string)类型
    字符串(string)类型 允许您给变量分配任何字符串值,字符串(string)类型是 System.String 类的别名。它是从对象(Object)类型派生的,字符串(string)类型的值可以通过两种形式进行分配:引号和 @引号

    例如:
      string str = "baidu.com";
      一个 @引号字符串:@"baidu.com";

      C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待
      比如:
        string str = @"C:\Windows";
        等价于:string str = "C:\\Windows";
  用户自定义引用类型有:class、interface 或 delegate

六、C# 类型转换方法

  C# 提供了下列常用的内置类型转换方法

序号 方法 描述
1 ToChar 把类型转换为单个 Unicode 字符类型
2 ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构
3 ToDecimal 把浮点型或整数类型转换为十进制类型
4 ToDouble 把类型转换为双精度浮点型
5 ToInt16/ToInt32/ToInt64 把类型转换为 16/32/64 位整数类型
6 ToString 把类型转换为字符串类型
7 ToType 把类型转换为指定类型
8 ToUInt16 把类型转换为 16 位无符号整数类型

七、其他

  -> 运算符(算术、关系、逻辑、位、赋值、其他)
  -> 判断、循环、访问修饰符、方法
  -> 数组、字符串、枚举、Class
  -> 继承、多态、重载
  -> 接口 、命名空间、正则表达式、异常处理
    和Java类似

    下面列出 C# 一些重要的功能:

      布尔条件(Boolean Conditions)
      自动垃圾回收(Automatic Garbage Collection)
      标准库(Standard Library)
      组件版本(Assembly Versioning)
      属性(Properties)和事件(Events)
      委托(Delegates)和事件管理(Events Management)
      易于使用的泛型(Generics)
      索引器(Indexers)
      条件编译(Conditional Compilation)
      简单的多线程(Multithreading)
      LINQ 和 Lambda 表达式
      集成 Windows

八、Java 和 C# 的相同点和区别
  相同点:
    都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装,继承,多态)

  区别:

  1、开发环境
    C# 用Visual Studio,而JAVA用MyEclipse;跨平台Java用虚拟机,C#用Framework;Java所有平台都支持,而C#只有Windows和Linux支持。
    很多网友认为C#语言比Java更先进,如在泛型和linq上,这只能说C#编程体验好。Sun初衷是把Java设计成一个跨平台的Runtime,而Microsoft只是把.Net做成Windows的一个扩展。

  2、目前市场上Java比C#占优势
    很多大公司选用Java,如京东,淘宝和百度,现状是在企业更通用,Java做Web类开发很强大,C#做窗体类开发更好。

  3、安全性
    Java是开源的,因此在安全性能上是有一些欠缺的,C#经常应用于后台内部网络的开发,C#的安全性是很有保障的。

  语法上区别:

  1.C#中的命名空间是namespace,类似于Java中的package(包),在Java中导入包用import而c#中用using;

  2.c#和Java都是从main函数入口的,但是c#中的main函数的首字母必须大写,而且有4种写法;

  3.数据类型:Java跟c#基本都差不多,但是Java的String类型的首字母必须大写,而c#中可以小写也可以大写;还有布尔型,Java中是boolean,c#中是bool;

  4.输出:c#有三种方式输出:Cosole.WriteLine()、Cosole.WriteLine(要输出的值)、 Cosole.WriteLine("格式字符串",变量列表); 前两种的用法与Java中的System.out.println()方法的用法相同,第三种方式是根据占位符输出的,比Java更加方便;

  5.控制流语句:c#跟Java类似,还有c#中的switch如果case后面有内容必须要有break;Java可以没有break;

  6.方法中传递的参数:两种语言都使用值传递与引用传递,C#的引用传递的关键字是ref与out;ref侧重于修改,out侧重于输出,而Java中都以传值方式;

  7.访问修饰符:C#中的访问修饰符与Java中的基本对应,但多出了一个internal,简而言之,C#有5种类型的可访问性,如下所示:
    public:成员可以从任何代码访问
    protected:成员只能从派生类访问
    internal:成员只能从同一程序集的内部访问
    protected:成员只能从同一程序集内的派生类访问
    private:成员只能在当前类的内部访问

  8.由于C#中不存在final关键词,如果想要某个类不再被派生,你可以使用sealed关键词密封;

  9.集合:两种语言都有集合ArrayList,还有通过键访问值的 Java 中是HashMap而 c# 中是HashTable;c#比Java多泛型集合List<T>与Dictionary<K,V>更容易了,无需拆箱装箱了,更安全;

  10.继承:Java中用关键字extends,c#只用":"就行了.调用父类的构造方法Java用super关键字,而c#用base关键字;
  11.多态:抽象类和抽象方法两种语言都用abstract关键字,Java中另外一个类如果继承了它,实现直接重写此方法就可以;而c#必须加上关键字override实现,C#还比Java多一种虚方法来实现多态;

  12.接口:都用关键字interface定义,Java实现用关键字implements;c#用":"实现。在C#中,接口内的所有方法默认都是公用方法。在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中 显式为接口的方法指定public修饰符是非法的;

  13.C# 中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。在Java中没有与C#中的as操作符等价的操作符,as操作符与is操作符非常相似,但它更富有"进取心":如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则它把变量引用设置成null。

原文链接:https://blog.csdn.net/lairikeqi/article/details/84617737

第一次发表文章,心里情绪万千。。。。多多指教!

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄