zoukankan      html  css  js  c++  java
  • C#语言学习之旅(1):C#基础

    本章节介绍C#最基础知识(具备一定C#编程的基础知识)。

    1.1 第一个C#程序

    下面编译的当然是最最经典的helloworld代码,代码如下。

    hello World
    using System;
    using System.Collections.Generic;

    namespace CSharpDemo
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                Console.WriteLine("Hello World");
                Console.WriteLine();
            }
        }
    }

    编译运行结果显示:Hello World

    C#没有用于输入输出的内置关键字,而完全是依赖.net类中的System.Console类。标准的system命名空间包含了最常见的.net类型。

    1.2定义变量

    在C#中声明变量使用下面语法:dataType indentifier;

    例如:int i=10,y=20;  

    注意事项:C#是区分大小写的,也就是说定义的变量myDemo,和MyDemo是两个不同的变量。

    1.3 变量的初始化

    在C#中变量都必须要进行初始化,若没有初始化,编译器会将当做错误处理。

    C#中有两种方法来确保变量在使用之前初始化:

    1.变量是类或结构中的字段,如果没有显式初始化,创建这些变量时,其值默认为0。

    2.方法中的局部变量必须显式初始化,之后才能够在语句中使用其值。

    1.4 类型判断

    类型推断使用var关键字,var关键字是C# 3.0开始新增的特性,称为推断类型。编译器可以根据变量的初始化值推断变量的类型,例如:var number=2;那么编译器就能够推断出number类型来,其实就是弱化了类型。

    1.5 常量

    常量就是在使用过程中不会发生变化的变量,只需要在定义变量之前添加const关键字即可。比如const int a=2;

    常量的特性:

    1.常量必须在声明中初始化。

    2.常量的值必须在编译时用于计算。

    3.常量总是静态的。

    1.6 数据类型

    C#认可的预定义类型并不是内置于C#语言中,而是内置在.net framework中。也就是当您定义了一个int类型声明时,实际上是使用了.net结构中System.Int32的一个实例。

    C#预定义类型有15个类型,其中13个值类型,2个引用类型(string和object)

    A、整型

    sbyte ,8位有符号的整数,范围从 -128到127.

    byte ,8位无符号的整数,范围从 0到255.

    short,16位有符号的整数,范围从 -32768到32767

    ushort ,16位无符号的整数,范围从0到65535

    int,32位有符号的整数,范围从-2147483648到2147483647

    uint,32位无符号的整数,范围从0到4294967295

    long,64位有符号的整数,范围从-2的31次方到2的31次方减1

    ulong,64位无符号的整数,范围从0到2的64次方减1

    B、浮点类型。

    float ,32位单精度浮点数。

    double,64位双精度浮点数。

    如果代码对某个非整数值,如12.3硬编码,则编译器一般假定该变量是double,如果想指定其为float,则可以在后面加上字符f。

    C、decimal类型。

    该类型是一种财务专用数据类型,是128位高精度十进制表示法。

    要把数据指定为decimal类型的,只需在数字后面加上M(或者m)

    D、 bool类型。

    C#的bool类型包含true和false。

    E、 字符类型。

    也就是char类型,表示一个16位的unicode字符。

    char类型的字面量是采用 单引号 括起来的。而不是双引号。双引号括起来的是字符串类型的。

    F、预定义引用类型。

    A、object类型。

    这是C#的基类,所有的类都派生自它。所以,可以使用object引用绑定任何子类型的对象,object类型执行许多基本的一般用途的方法,如 Equals() GetHashCode(),GetType()等,我们需要针对某些方法进行“重写,这在后面我们将会学习到。

    B、string类型。

    说明:值类型和引用类型的区别

    首先从概念上区别:值类型直接存储其值,引用类型对其存储值得引用。二者之间不同之处在于,值类型存储在堆栈中,而引用类型存储在托管推中

    C#中的数据类型,可以分为值类型和引用类型,值类型存储在堆栈上,而引用类型存储在托管堆上。

    如下代码示例,

    int i=10;

    int j=i;

    i和j的值都是10,并且在内存中会有两个地方存储10.

    再看下面的代码

    Vector x=new Vector();

    x.Value=20;

    Vector y=x;

    Console.WriteLine(y.Value);

    y.Value=50;

    Console.WriteLine(x.Value);

    Vector是一个引用类型,引用类型在使用的时候需要new 来实例化一个。这段代码执行后,只有一个Vector对象,x,y都指向包含该对象的内存地址。因为x,y存储的都是对象的引用,所以当y改变的时候,x也会改变。所以该程序输出的结果是20和50.

    如果变量是一个引用,就可以把其值设置为null,表示不指向任何对象

     1.7 枚举

    枚举是用户定义的整数类型

    定义如下的枚举:

    枚举定义及使用
    using System;
    using System.Collections.Generic;

    namespace CSharpDemo
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                Console.WriteLine(TimeOfDay.Moring);
                Console.WriteLine();
            }

            
    public enum TimeOfDay
            {
                Moring=0,
                AfterNoon=1,
                Evening=2
            }
        }
    }

     1.8 命名空间

    命名空间提供了一种程序相关组织类和其他类型的方式。与文件不一样,命名空间只是逻辑组合而不是物理组合。

    例如:

    namespace CSharpDemo
    {}

     1.8.1 using语句

    用于简化键入繁琐的命名空间。使用using关键字即可。例如using system;

    using 关键字的另外一个用途是给类和命名空间添加别名,例如 using alias=system;那么就给system空间增加了一个别名

    1.9 C# 预处理指令

    1.9.1 #define和#undef

    #define debug

    告诉编译器存在给定的debug符号

    #undef debug

    删除debug符号,如果没有这个符号,那么没有任何作用。

    1.9.2 #if #elif #else 和endif

     这些指令告诉编译器是否要编译某个代码块比如:

     public int doSomeThing()
            {
                #if debug
                {
                //do something
                }
            }

    1.9.3 #warning和error

    当编译遇到他们时候分别表示警告或错误。使用如下:

    #warning "you should do something"

    consle.writeline("do something");

    1.9.4 #region 和#endregion

    该指定用于把一段代码标记为有指定名称的一个模块。该功能主要是方便代码在屏幕上面布局。

    使用示例:

    示例
       #region 测试使用过的
        
    class Program
        {
            
    static void Main(string[] args)
            {
                Console.WriteLine(TimeOfDay.Moring);
                Console.WriteLine();
            }

            
    public enum TimeOfDay
            {
                Moring=0,
                AfterNoon=1,
                Evening=2
            }
            
    public void doSomeThing()
            {
    #warning "you should do something"
                {
                
    //do something
                }
            }
        }
        
    #endregion

    小结:写的比较不够细。

  • 相关阅读:
    bzoj 3924
    bzoj 1095
    luogu 4886
    bzoj 2152
    CF960G
    bzoj 3561
    bzoj 4176
    bzoj 4407
    bzoj 3309
    luogu 4608
  • 原文地址:https://www.cnblogs.com/ylwn817/p/2049425.html
Copyright © 2011-2022 走看看