C#基础
数值类型
新增用于表示十进制型:Decimal
常量const
默认静态static
的,不用显示定义
//const
const int val=5;
//数组表示区别于C++中的int array[]
Decimal[] array=new Decimal[count];
var
根据表达式推断推断变量类型
var myVariable=99;
var myStrVar="Hello";
语句类型
循环语句中新增foreach
类似C++中的for(auto var:array)
int[] array=new int[]{0,1,2,3,4,5};
foreach(int element in array){
...
}
资源管理与异常
异常处理
try
{
....
}
//顺序catch
catch(){
}
catch(){
}
finally{
}
C#提供using
控制资源的生存期,可创建一个对象,该对象在using
语句块结束时销毁;使用using
声明的变量必须实现IDisposable
接口,该接口仅包含一个名为Dispose的方法,用于清理对象使用的任何资源。
//等价于自动调用finally
using(type variable=Initialization)
{
//try段代码
}
实现IDisposable
接口
class Example:IDisposable
{
private Resource scarce;
private bool idisposed=false;//指示是否被清理
~Example()//析构器
{
this.Dispose(false);//表示释放非托管资源
}
public virtual void Dispose()
{
this.Dispose(true);//释放托管资源
GC.SuppressFinalize(this);//用于通知GC该对象已经完全释放,不再进入f-reachable队列调用析构器
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)//确保只在第一次运行才会清理资源
{
if (disposing)
{
//在此释放大型托管资源
}
//在此释放非托管资源
disposed = true;
}
}
private void checkIfDisposed()
{
if(this.disposed)
throw new Exception...;
}
}
类与结构体
所有类都派生自System.Object
类修饰类型
修饰符 class Person{
};
修饰符 | 访问权限 |
---|---|
无或internal | 在同一程序集中访问类 |
public | 引用该程序集的都可可以访问 |
internal(可空)/public abstract | 不能被实例化 只能被继承(类似C++抽象类),区别访问权限 |
i/p sealed | 不能被继承,只能实例化,区别访问权限 |
成员修饰类型
修饰符 string Person;
修饰符 | 访问权限 |
---|---|
public | 都可以 |
private | 仅该类 |
protected | 继承类+该类 |
internal | 同一程序集 |
protected internal | 在统一程序集下的该类和继承类 |
类与结构体区别
与C++一样,类使用class
,结构体使用struct
struct Point{
private int m_x;//不可以对其进行初始化
private double m_y;
//为保证每个数据都被初始化,必须在自己定义的有参构造函数中为所有字段(成员)赋值
//不能显示无参构造函数,因为无参构造函数是一直存在的
//public Point()//error
//{
// m_x = 0;
// m_y = 0.0;
//}
public Point(int x,double y){
m_x=x;
m_y=y;
}
}
class | struct |
---|---|
必须使用new |
可以不使用new ,但字段是没有初始值的 |
不能继承类,可以继承类和实现接口 | 不能继承结构或者类,仅可以实现接口 |
新增属性思想
防止客户端直接更改,便于字段控制和访问(封装)
public class Person{
private string name;
public string Name{
//通过添加访问权限进行只读 只写
(private) get{
return name;
}
set{
//在写的时候可以进行限制约束条件和异常处理
if(....)
name=value;
else
throw(new Exception(...))
}
}
}
新增方法中的索引器
当一个类包含数组成员(也可能不包含,做其他操作),通过索引器简化类中数组成员访问,类似属性ÿ