C#(二十二)之抽象方法 密封方法 base new 关键字

53 篇文章 1 订阅
1 篇文章 0 订阅

1:普通方法的隐藏(new)

标题看了很高深,其实就是在派生类中使用new关键字重写其继承的类中的某个方法。

New关键字可以省略,但是最好不要省略。

基类中:

// 普通方法
        public void sleeper()
        {
            Console.WriteLine("我是基类中的方法");
        }

派生类中:

// 重基类中的sleeper普通方法
        public new void sleeper()
        {
            Console.WriteLine("我是派生类中的方法");
        }

2:base关键字

这个是与virtual联合使用的,在基类中定义了一个虚方法,在派生类中重写此虚方法,但是在调用的时候想通过实例化派生类来调用基类中的虚方法,这里就用到了base关键字。

基类中:

// Virtual虚方法
        public virtual string GetResult()
        {
            return "我是一个虚方法";
        }

派生类中:

// 在派生类中重写Virtual虚方法
        public override string GetResult()
        {
            return "我是在派生类中重写的虚方法";
        }
        public void tabb()
        {  
            // 正常调用派生类中的方法
            string strr = GetResult();
            Console.WriteLine(strr);
            // 调用基类中的需方法
            string stre = base.GetResult();
            Console.WriteLine(stre);
        }

主函数中:

/* C#主要的运行函数,就是main函数 */
static void Main(string[] args)
{
     tarce ta = new tarce();
     paisheng pai = new paisheng();
     // base 关键字
     pai.tabb();
}

3:抽象类和抽象方法(abstract)

这里对抽象方法及抽象类只是简单的介绍,详细请看我的这篇文章《C#中的抽象类(abstract)

定义抽象方法不需要花括号;

主要应用于继承;

抽象类的方法在派生类中重写也应用override关键字;

在多态中应用;

抽象类不能实例化;

// 定义一个抽象类
    public abstract class person
    {
        // 抽象类中的抽象方法定义不需要花括号
        public abstract void Speak();
    }
 
    //定义一个派生类继承抽象类
    class sheng : person {
        public override void Speak()
        {
            Console.WriteLine("你说啥");
        }
    }

主函数中的方法:

static void Main(string[] args)
{
      //抽象方法测试
      sheng sh = new sheng();
      sh.Speak();
}

4:密封类和蜜蜂方法(sealed)

密封类中所有方法其派生类都不能继承;

密封方法其派生类也是继承不了的。

// 定义一个密封类
    sealed class mifeng{
        public void fang()
        {
            Console.WriteLine("我是不能被继承的");
        }
    }
 
    // 定义一个派生方法,继承密封类
    class ji_mifeng : mifeng
    {
        public void get() {
           // fang(); 这么写会报错,密封类不可以继承
        }
    }
 
    // 定义一个普通类
    class feng {
        public void aaa (){
            Console.WriteLine("我是基类中的普通方法");
        }
 
        public sealed void bbb()
        {
            Console.WriteLine("我是基类中的密封方法");
        }
    }
 
    // 定义一个派生类
    class ji_pai:feng
    {
        public void gets()
        {
            aaa();
            bbb();//这么写会报错,密封类不可以继承
        }
    }

有好的建议,请在下方输入评论。

欢迎访问个人博客
https://guanchao.site

欢迎访问小程序:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值