C#面向对象--类

一、类(Class)是CTS中五种基本类型之一,是一种引用类型,封装了同属一个逻辑单元的数据(Data)和行为(Behavior),这些数据和行为通过类中的成员表示;使用class关键字定义类:

//定义一个公共类MyClass
public class MyClass
{
    public int MyField; //声明一个int类型的公共实例字段
    public void MyFunc() //声明一个公共实例方法
    {
        /do}
}
//创建类MyClass的实例并赋值给MyClass类型的变量myObj
MyClass myObj = new MyClass();

1.在命名空间中定义的类默认为内部类,即internal class,此时只有当前项目中的代码才能访问它;通常情况下会将类指定为公共类,即public class,此时可以由其他项目中的代码来访问它;

※在命名空间中定义的类只能为public或internal,在其它类型内部定义的类为该类型的嵌套类型,可以指定任何访问修饰符;

二、在定义类时,还可以指定类是抽象类或密封类,二者不可同时指定;

1.抽象类,即abstract class,不能被实例化,只能被继承;

※抽象类中可以声明抽象成员(只有抽象类中才可以声明抽象成员),也可以声明任意非抽象成员(虽然无法实例化,但可以声明构造函数和析构函数);抽象成员包括方法、属性、事件和索引器,抽象成员不提供实现,没有方法体,抽象成员不能是私有的,继承自抽象类的非抽象类必须通过关键字override实现基类中的抽象成员;

public abstract class MyAbstractClass //定义一个公共抽象类MyAbstractClass
{
    public abstract void MyFunc(); //声明一个公共抽象方法MyFunc
    public abstract int MyProperty //声明一个公共抽象属性MyProperty,声明抽象属性时只需要声明需要的访问器即可,在派生类中重写抽象属性时也只能重写抽象基类中存在的访问器
    {
        get;
    }
}
public class MyClass : MyAbstractClass //定义一个公共类MyClass继承自抽象类MyAbstractClass
{
    public override void MyFunc() //实现抽象基类中的抽象方法
    {
        //do…
    }
    public override int MyProperty //实现抽象基类中的抽象属性
    {
        get;
    }
}

※虽然抽象类不能直接通过new运算符实例化,但通过c#教程隐式转换可以将继承自抽象类的类的实例转换为抽象类的变量:

MyAbstractClass myObj = new MyClass(); //创建MyClass类型的实例,隐式转换为MyAbstractClass
  ※抽象类同非抽象类一样可以继承其它任何可访问的非密封类,当抽象类继承的基类中包含虚方法时,抽象类可以使用抽象方法重写该虚方法,此时在抽象类的派生类中无法访问基类中的该虚方法,通过这种方式,抽象类可以强制派生类提供基类中该虚方法的新实现:

public class MyClass
{
    public virtual void MyFunc()
    {
        //do…
    }
}
public abstract class MyAbstractClass : MyClass
{
    public abstract override void MyFunc();
}
public class MyDerivedClass : MyAbstractClass
{
    public override void MyFunc()
    {
        //do…
    }
}

2.密封类,即sealed class,不能被继承;

public sealed class MyClass { }
  ※密封类中不可以声明虚成员;如果声明了protected、protected internal或private protected成员会产生编译器警告CS0628;

※由于密封类从来不用作基类,所以有些运行时优化可以略微提高密封类成员的访问速度;

三、在定义类时,还可以定义静态类,即static calss,静态类与非静态类基本相同,但存在以下区别:

※静态类不能实例化,默认即为密封的,不能被继承,静态类也不能继承其它类(默认继承自Object)或实现任何接口;

※静态类只能包含静态成员,始终使用类名访问静态类的成员;

※静态类不包含实例构造函数,但可以包含静态构造函数,与非静态类一样,静态类也只能声明一个无参的静态构造函数,不带访问修饰符也不含参数:static MyClass() { };

※在程序运行时,会在首次引用静态类之前初始化其字段并调用其静态构造函数,静态构造python基础教程
函数只调用一次,在程序所驻留的程序域的生存期内,静态类会保留在内存中

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!

作者:Minotauros
出处:https://www.cnblogs.com/minotauros/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值