文章目录
C#实例(helloworld)
using System
namespace HelloWorldApplication
{
class HelloWorld{
static void Main(string[] atgs)
{
Console.WriteLine("Hello world");
Console.ReadKey();
}
}
}
C#程序结构
-
程序的第一行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。
-
下一行是 namespace 声明。一个 namespace 里包含了一系列的类。HelloWorldApplication 命名空间包含了类 HelloWorld。
-
下一行是 class 声明。类 HelloWorld 包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。在这里,HelloWorld 类只有一个 Main 方法。
-
下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。
-
下一行 /…/ 将会被编译器忽略,且它会在程序中添加额外的 注释。
-
Main 方法通过语句 Console.WriteLine(“Hello World”); 指定了它的行为。
-
WriteLine 是一个定义在 System 命名空间中的 Console 类的一个方法。该语句会在屏幕上显示消息 “Hello World”。
-
最后一行 Console.ReadKey(); 是针对 VS.NET 用户的。这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。
-
以下几点值得注意:
- C# 是大小写敏感的。
- 所有的语句和表达式必须以分号(;)结尾。
- 程序的执行从 Main 方法开始。
- 与 Java 不同的是,文件名可以不同于类的名称。 命令行编译代码步骤:
- 打开一个文本编辑器,添加上面提到的代码。
- 保存文件为 helloworld.cs。
- 打开命令提示符工具,定位到文件所保存的目录。
- 键入 csc helloworld.cs 并按下 enter 键来编译代码。
- 如果代码没有错误,命令提示符会进入下一行,并生成 helloworld.exe 可执行文件。
- 接下来,键入 helloworld 来执行程序。
- 您将看到 “Hello World” 打印在屏幕上。
C#数据类型
- 值类型:
可以直接分配给一个值,是从类SYstem.ValueType中派生的。值类型直接包含数据,每个值有默认值。char默认值是"\0"。得到字节大小用sizeof。 - 引用类型:
引用类型不包含储存在变量中的实际数据,但包含对变量的引用。内置的引用有object,dynamic,string。 - 对象类型:
对象类型是C#通用类型系统中所有数据类型的终极基类。当一个值类型转换为对象类型时,被称为装箱。另一方面,当一个对象类型转换成值类型时,被称为拆箱。 - 动态类型:
可以储存任何类型的值在动态数据类型变量中,这些变量的类型检查是在运行时发生的。
语法为
dynamic<variable_name> = value
例如
dyamic d = 20;
- 字符串类型:
允许给变量分配任何字符串值,字符串类型是System.string别名,是从object类派生出来的。字符串类型的值可以通过两种形式分配
string var1 = "hi, huzi";
string var2 = @"huzi, hi";
加@将转义字符当做普通字符串对待,可以任意换行,换行符及缩进空格都计算在内。相当于原始字符串。
- 指针类型:
指针类型变量存储另一种类型的内存地址。C#中的指针与C++相同。声明如:
type* identifier
C#类型转换- 隐式类型转换:
这些转换是C#默认安全的方式进行的转换,不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。 - 显示类型转换:
强制类型转换,需要强制转换运算符,会造成数据丢失。
- 隐式类型转换:
序号 | 方法 & 描述 |
---|---|
1 | ToBoolean 如果可能的话,把类型转换为布尔型。 |
2 | ToByte 把类型转换为字节类型。 |
3 | ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。 |
4 | ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构。 |
5 | ToDecimal 把浮点型或整数类型转换为十进制类型。 |
6 | ToDouble 把类型转换为双精度浮点型。 |
7 | ToInt16 把类型转换为 16 位整数类型。 |
8 | ToInt32 把类型转换为 32 位整数类型。 |
9 | ToInt64 把类型转换为 64 位整数类型。 |
10 | ToSbyte 把类型转换为有符号字节类型。 |
11 | ToSingle 把类型转换为小浮点数类型。 |
12 | ToString 把类型转换为字符串类型。 |
13 | ToType 把类型转换为指定类型。 |
14 | ToUInt16 把类型转换为 16 位无符号整数类型。 |
15 | ToUInt32 把类型转换为 32 位无符号整数类型。 |
16 | ToUInt64 把类型转换为 64 位无符号整数类型。 |
C#常量
字符常量:
是放在单引号中的,且课存储在一个简单的字符类型变量中。
字符串常量:
常放在双引号中或者@""中。
定义常量语法是const关键字来声明的。
C#运算符
- is 判断对象是否为某一类型
- as 强制类型转换,即使失败也不会抛出异常。
C#的foreach循环
类似于C++的智能循环,
foreach(int a in fibarray){
System.Console.WriteLine(a);
}
C#的参数传递
- 值传递
- 引用传递
引用这些参数表示与提供给方法的实际参数具有相同的内存位置。参数值改变,本来的值也改变
在C#中,使用ref关键字声明引用参数。
public int swap(ref int x, ref int y);
- 按输出传递参数
可以用输出参数输出多个值,输出参数会把方法输出的数据赋给自己。
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#可空类型
- ?
单问号用于对int,double,bool等无法直接赋值为null的数据类型进行null赋值。意思是这个数据类型似乎NullAble类型。
int? num1 = null;
int? num2 = 45;
double? num3 = new double?();
double? num4 = 3.14;
bool? boolval = new bool?();
- ??
用于判断一个变量在为null时返回一个指定的值。如果第一个操作数的值为null,则运算符返回第二个操作数的值,否则返回第一个操作数的值。
num3 = num1 ?? 5.34;
C#数组
- 多维数组:
如二维数组string[ , ] names;
,访问二维数组方法:names[1,5];
- 交错数组:
如二维交错数组,声明方法int[][] scores;
,声明一个交错数组,int [][] a = new int[5][];
。初始化一个交错数组,int [][] scores = new int[2][]{new int[2], new int [5]};
- 可变长度的参数数组:
关键字是paramspublic int name(params string[] name);
- 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())