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

小结:写的比较不够细。

原文地址:https://www.cnblogs.com/ylwn817/p/2049425.html