C#基础

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

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

二、Create a New C# Project
环境:Visual Studio (VS)
编译 & 执行 C# 程序
如果您使用 Visual Studio.Net 编译和执行 C# 程序,请按下面的步骤进行:

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

或者通过命令符工具

打开一个文本编辑器,添加上面提到的代码,保存文件为 helloworld.cs
打开命令提示符工具,定位到文件所保存的目录
键入 csc helloworld.cs 并按下 enter 键来编译代码
如果代码没有错误,命令提示符会进入下一行,并生成 helloworld.exe 可执行文件
接下来,键入 helloworld 来执行程序。
您将看到 “Hello World” 打印在屏幕上。
————————————————
三、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!”;
  Console.ReadKey(); 是针对 VS.NET 用户,这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。


四、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 = 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 位无符号整数类型
————————————————

七、C# 中

> 运算符(算术、关系、逻辑、位、赋值、其他)

-> 判断、循环、访问修饰符、方法

-> 数组、字符串、枚举、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用idea、Eclipse;跨平台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与Dictionary
更容易了,无需拆箱装箱了,更安全;

  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。
————————————————
 

你可能感兴趣的:(c#)