C#学习笔记@huzicpp

C#实例(helloworld)

using System
namespace HelloWorldApplication
{
	class HelloWorld{
		static void Main(string[] atgs)
		{
			Console.WriteLine("Hello world");
			Console.ReadKey();
		}
	}
}

C#的vs code环境搭建

C#程序结构

  1. 程序的第一行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。

  2. 下一行是 namespace 声明。一个 namespace 里包含了一系列的类。HelloWorldApplication 命名空间包含了类 HelloWorld。

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

  4. 下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。

  5. 下一行 // 将会被编译器忽略,且它会在程序中添加额外的 注释。

  6. Main 方法通过语句 Console.WriteLine(“Hello World”); 指定了它的行为。

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

  8. 最后一行 Console.ReadKey(); 是针对 VS.NET 用户的。这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。

以下几点值得注意:
C# 是大小写敏感的。
所有的语句和表达式必须以分号(;)结尾。
程序的执行从 Main 方法开始。
与 Java 不同的是,文件名可以不同于类的名称。
命令行编译代码步骤:
打开一个文本编辑器,添加上面提到的代码。
保存文件为 helloworld.cs。
打开命令提示符工具,定位到文件所保存的目录。
键入 csc helloworld.cs 并按下 enter 键来编译代码。
如果代码没有错误,命令提示符会进入下一行,并生成 helloworld.exe 可执行文件。
接下来,键入 helloworld 来执行程序。
您将看到 “Hello World” 打印在屏幕上。

C#数据类型

  1. 值类型:
    可以直接分配给一个值,是从类SYstem.ValueType中派生的。值类型直接包含数据,每个值有默认值。char默认值是"\0"。得到字节大小用sizeof。
  2. 引用类型:
    引用类型不包含储存在变量中的实际数据,但包含对变量的引用。内置的引用有object,dynamic,string。
  3. 对象类型:
    对象类型是C#通用类型系统中所有数据类型的终极基类。当一个值类型转换为对象类型时,被称为装箱。另一方面,当一个对象类型转换成值类型时,被称为拆箱。
  4. 动态类型:
    可以储存任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的。
    语法为
    dynamic<variable_name> = value
    例如
dyamic d = 20;
  1. 字符串类型:
    允许给变量分配任何字符串值,字符串类型是System.string别名,是从object类派生出来的。字符串类型的值可以通过两种形式分配
string var1 = "hi, huzi";
string var2 = @"huzi, hi";

加@将转义字符当做普通字符串对待,可以任意换行,换行符及缩进空格都计算在内。相当于原始字符串。

  1. 指针类型:
    指针类型变量存储另一种类型的内存地址。C#中的指针与C++相同。声明如:
    type* identifier
    C#类型转换
    1. 隐式类型转换:
      这些转换是C#默认安全的方式进行的转换,不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
    2. 显示类型转换:
      强制类型转换,需要强制转换运算符,会造成数据丢失。
序号方法 & 描述
1ToBoolean
如果可能的话,把类型转换为布尔型。
2ToByte
把类型转换为字节类型。
3ToChar
如果可能的话,把类型转换为单个 Unicode 字符类型。
4ToDateTime
把类型(整数或字符串类型)转换为 日期-时间 结构。
5ToDecimal
把浮点型或整数类型转换为十进制类型。
6ToDouble
把类型转换为双精度浮点型。
7ToInt16
把类型转换为 16 位整数类型。
8ToInt32
把类型转换为 32 位整数类型。
9ToInt64
把类型转换为 64 位整数类型。
10ToSbyte
把类型转换为有符号字节类型。
11ToSingle
把类型转换为小浮点数类型。
12ToString
把类型转换为字符串类型。
13ToType
把类型转换为指定类型。
14ToUInt16
把类型转换为 16 位无符号整数类型。
15ToUInt32
把类型转换为 32 位无符号整数类型。
16ToUInt64
把类型转换为 64 位无符号整数类型。

C#常量

字符常量:
是放在单引号中的,且课存储在一个简单的字符类型变量中。
字符串常量:
常放在双引号中或者@""中。
定义常量语法是const关键字来声明的。

C#运算符

  1. is 判断对象是否为某一类型
  2. as 强制类型转换,即使失败也不会抛出异常。

C#的foreach循环

类似于C++的智能循环,

foreach(int a in fibarray){
System.Console.WriteLine(a);
}

C#的参数传递

  1. 值传递
  2. 引用传递
    引用这些参数表示与提供给方法的实际参数具有相同的内存位置。参数值改变,本来的值也改变
    在C#中,使用ref关键字声明引用参数。
public int swap(ref int x, ref int y);
  1. 按输出传递参数
    可以用输出参数输出多个值,输出参数会把方法输出的数据赋给自己。
using System
namespace CaluatorApplication
{
	class Number
	{
		public void getValue(out int x)
		{
			int temp = 5;
			x = temp;
		}
		static void Main(string[] args)
		{
			int a = 100;
			Console.WriteLine("方法调用之前,a的值:{0}", a);
			Number num = new Number();
			num.getValue(out a);
			Console.WriteLine("方法调用之后,a的值:{0}", a);
		}
	}
}

C#可空类型

  1. ?
    单问号用于对int,double,bool等无法直接赋值为null的数据类型进行null赋值。意思是这个数据类型似乎NullAble类型。
int? num1 = null;
int? num2 = 45;
double? num3 = new double?();
double? num4 = 3.14;
bool? boolval = new bool?();
  1. ??
    用于判断一个变量在为null时返回一个指定的值。如果第一个操作数的值为null,则运算符返回第二个操作数的值,否则返回第一个操作数的值。
num3 = num1 ?? 5.34;

C#数组

  1. 多维数组:
    如二维数组string[ , ] names;,访问二维数组方法:names[1,5];
  2. 交错数组:
    如二维交错数组,声明方法int[][] scores;,声明一个交错数组,int [][] a = new int[5][];。初始化一个交错数组,int [][] scores = new int[2][]{new int[2], new int [5]};
  3. 可变长度的参数数组:
    关键字是paramspublic int name(params string[] name);
  4. array类:见菜鸟教程

C#的继承

<访问修饰符符> class <基类>
{
 ...
}
class <派生类> : <基类>
{
 ...
}

调用基类方法,使用base.
C#只支持利用接口多重继承。接口也可以继承接口。

C#抽象类

抽象类不能创建一个抽象类的实例,不能在一个抽象类外部声明一个抽象方法,通过在类定义前面放关键字sealed,可以将类声明为密封类,当一个类被声明为sealed时,不能被继承,抽象类不能被声明为sealed。
抽象类关键字abstract
继承接口的定义函数方式public override int area();

当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法,用virual修饰。
虚方法可以在不同的继承类中有不同的实现。
对虚方法的调用是在运行时发生的,动态多态性是通过抽象类和虚方法实现的。

C#运算符重载

public static Box operator+ (Box b, Box c)
{
   Box box = new Box();
   box.length = b.length + c.length;
   box.breadth = b.breadth + c.breadth;
   box.height = b.height + c.height;
   return box;
}

C#的预处理器&&C#的正则表达式

预处理器
主要是#define,#if,#else 的使用
正则表达式
主要是.Matches方法,Replace方法等使用到。

C#的异常处理

处理和java十分类似

异常类:
System.IO.IOException 处理 I/O 错误。
System.IndexOutOfRangeException 处理当方法指向超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException 处理当数组类型不匹配时生成的错误。
System.NullReferenceException 处理当依从一个空对象时生成的错误。
System.DivideByZeroException 处理当除以零时生成的错误。
System.InvalidCastException 处理在类型转换期间生成的错误。
System.OutOfMemoryException 处理空闲内存不足生成的错误。
System.StackOverflowException 处理栈溢出生成的错误。
创建自定义的异常是用 throw(new Expection())
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值