C#学习记录

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(...))
        }
    }
}

新增方法中的索引器

当一个类包含数组成员(也可能不包含,做其他操作),通过索引器简化类中数组成员访问,类似属性ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值