C#教程

程序结构

	//包含 System 命名空间
	using System;
	//命名空间声明,一个命名空间李包含了一系列的类
	namespace HelloWorldApplication
	{
	   //声明类
	   class HelloWorld
	   {
	      //定义了 Main 方法,是所有 C# 程序的 入口点
	      static void Main(string[] args)
	      {
	         /* 我的第一个 C# 程序*/
	         Console.WriteLine("Hello World");
	         Console.ReadKey();
	      }
	   }
	}

数据类型

值类型

值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。比如 int、char、float,它们分别存储数字、字符、浮点数

指针类型

C# 中的指针与 C 或 C++ 中的指针有相同的功能

引用类型

引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。换句话说,它们指的是一个内存位置。

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

Object类型

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

当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。

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

Dynamic类型

您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的

语法:dynamic <variable_name> = value;

dynamic d = 20;

String类型

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

C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待,比如:

string str = @"C:\Windows";

等价于:

string str = "C:\\Windows";

封装

一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

  • public:所有对象都可以访问;
  • private:对象本身在对象内部可以访问;
  • protected:只有该类对象及其子类对象可以访问
  • internal:同一个程序集的对象可以访问;
  • protected internal:访问限于当前程序集或派生自包含类的类型。

可空类型

? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的。

int i; //默认值0
int? ii; //默认值null

声明一个 nullable 类型(可空类型)的语法如下:

< data_type> ? <variable_name> = null;

 double? num3 = new double?();
 double? num4 = 3.14157;
 bool? boolval = new bool?();

?? NULL合并运算,用于定义可空类型和引用类型的默认值。Null 合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null。

如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值

     double? num1 = null;
     double? num2 = 3.14157;
     double num3;
     num3 = num1 ?? 5.34;      // num1 如果为空值则返回 5.34,否则返回num1的值

?.

onNewImage?.Invoke(null, image);

当没有问号的时候直接点就是当前对象下的。。。(方法、属性等);加了问号表示当前对象不为null时再调用当前对象下的属性,防止由于对象为null导致的空指针;

get set

第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了,而第二个类型的name属性通过get set关键字进行了封装。

public class person{
	public string name;
}

public class person{
	public string Name{set;get;}
}

上面第二种写法相当于:

private string name;
public string Name{
	get { return name; }
	set { name = value; }
}

@ $

  • @ : 字符串可直接换行
  • $ : 可使用{} 进行取值
//1.字符串可直接换行
//特别注意:结果包含了隐藏的换行符\r\n, 如果该值参与MD5等签名,会造成签名不一致!!!!
string str1 = @"a 
b";

//str1结果:a\r\n
//          b



//2.可使用{} 进行取值
string str2 = $"c {str1}";
//str1结果:c a \r\n                         
//            b



string str3 = $@"c 
{str1}";
//str1结果:c \r\n
//                      a\r\n
//                      b

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×