C#类基础

一. C#中的类定义:修饰、继承、接口

修饰符关键字:

1. 使用 class 来声明类,默认情况下只有在当前项目中才可以进行访问

    使用 internal(访问修饰符) 来显式的指定这一点(没有必要)。

class MyClass{
    // Class Members
}

//显式指定
internal class MyClass{
    // Class Members
}

2. 使用 public(访问修饰符) 来修饰类,可被其他项目中的代码访问。

public class MyClass{
    // Class Members
}

3. 使用 abstract 来修饰类,指定类是抽象的,不能实例化,只能继承,可存在抽象对象,与访问修饰符可共用,与 sealed 互斥。

public abstract class MyClass{
    // Class Members,may be abstract
}

4.使用 sealed 来修饰类,指定类是密封的,不能继承,与访问修饰符可共用,与 abstract 互斥。

public sealed class MyClass{
    // Class Members
}

继承: 

主要有以下规则:

1. 只能存在一个基类;

2. 继承抽象类必须实现所继承的所有抽象成员,除非派生类也是抽象的;

3. 派生类的可访问性低于基类,编译器要求;

4. 基类位于继承列表第一项,接口跟在后面;

//基类
public class MyBase{
    // Class Members
}

//派生类
internal class MyClass : MyBase , IMyInterface{
    // Class Members
}

接口:

和类声明方式类似,使用 interface 关键字。

使用 public internal 访问修饰符关键字,不能使用 abstract 和 sealed 关键字。

public interface IMyInterface{
    // Interface Members
}

二. System.Object

Object 类 (System) | Microsoft Docs

所有类的基类,所以所有类均可访问该类中受保护和公共成员,可使用以下方法:

方法       返回类型虚拟静态说明
Object()N/A构造函数
~Object()N/A析构函数
Equals(object)bool查看对象参数是否引用同一个对象(对象为引用类型)进行比较
Equals(object, object)bool对两个对象进行比较,使用了Equals(object)函数,Object p1 = p2.Copy()
ReferenceEquals(object, object)bool比较传入的两个对象是不是同一个实例的引用,Object p1 = Object p2
ToString()                        string返回对应对象实例的字符串
MemberwiseClone()object创建新对象并复制成员
GetType()System.Type返回System.Type类型的对象
GetHashCode()int对象的散列函数

三. 构造函数和析构函数

如果有自己特殊的需求,可以提供自己的构造函数和析构函数,便于初始化和清理对象。

构造函数用于创建对象实例:

//简单构造函数
class MyClass{
    public MyClass(){
        //Constructor code
    }
}

//私有构造函数,仅包含静态成员的类使用,不允许创建对象实例
class MyClass{
    private MyClass(){
        //Constructor code
    }
}

//参数构造函数,依据自己的需求
class MyClass{
    public MyClass(){
        //Constructor code
    }

    public MyClass(int val){
        //Constructor code,uses val
    }

}

析构函数用于清除对象:

//简单析构函数,隐式调用基类析构函数
class MyClass{
    ~MyClass(){
        //Destructor code
    }
}

构造函数执行顺序为从基类到派生类,从Object(),MyBase(),MyClass()顺序而下执行。

可通过Base调用不同的基类构造函数: Object() — MyBase(int i) — MyCalss(int i, int j)

public class MyBase{
    public MyBase(){
        //Contructor code
    }
    public MyBase(int i){
        //Contructor code
    }
}

public class MyClass : MyBase{
    public MyClass(){
        //Contructor code
    }
    public MyClass(int i){
        //Contructor code
    }
    public MyClass(int i, int j) : Base(i) {
        //Contructor code
    }
}

可通过this调用非默认构造函数: Object() — MyBase(int i) — MyCalss(int i, int j) — MyCalss()

public class MyBase{
    public MyBase(){
        //Contructor code
    }
    public MyBase(int i){
        //Contructor code
    }
}

public class MyClass : MyBase{
    public MyClass() : this(i, j) {
        //Contructor code
    }
    public MyClass(int i, int j) : Base(i) {
        //Contructor code
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值