Base关键字用法

1、背景

我:虽然通过继承减少了代码冗余,但是,每一个子类的构造函数还是需要给所有属性赋值的,很麻烦的。

师:这个好办,用base就行啦。

我:贝司?还吉他呢!

师:别急,首先我们先介绍下实例化子类对象的时候调用父类构造函数。

运行结果:

从上面代码分析可知:

(1)执行 ChildClass child=new ChildClass(); 会首先调用父类无参构造函数(这个构造函数一定是无参构造函数),然后再调用子类无参构造函数,所以会先显示

(2)然后再执行child.SayHello(); 因为子类是继承父类的,所以直接调用父类的SayHello()方法,所以显示

总结一下:

在实例化子类对象的时候,总是要调用父类的构造函数,并且总是调用无参构造函数。如果父类没有无参构造函数,那么子类的构造函数就会报错

  

也就说说,子类是非常认死理的。必须去调用父类无参构造函数。这也是编程中容易出错的地方。父类没有编写无参构造函数,导致子类无法编译。

这时候解决错误有两种方法:

(1)直接手动编写父类无参构造函数

(2)在子类构造函数中使用base调用父类中的其他构造函数。Base后面括号中的实际参数需要与被调用的父类构造函数参数保持一致。

2、Base的用法

base其实最大的使用地方在面相对象开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法。

Base有两个用途

(1)在派生类中调用基类构造函数

(2)在派生类中调用基类的方法

2.1关于base调用基类构造函数

public class A
{
        public A()
        {
                Console.WriteLine("Build A");
        }
}
public class B:A
{
        public B():base()
        {
                Console.WriteLine("Build B");
        }
        static void Main()
        {
                B b = new B();
                Console.ReadLine();
        }
}

输出:

base调用基类有参构造和无参构造都可以的哦。

  class B:A
    {
        public B():base()
        {
            Console.WriteLine("Build B");
        }
        public B(string name) : base()
        {
            Console.WriteLine(name + "Build B(有参构造)");
        }
        /*
        public B(string name) : base(name)
        {
            Console.WriteLine(name + "Build B(有参构造)");
        }
       //*/

        public override void Hello()
        {
            base.Hello();//调用基类的方法
            Console.WriteLine("Hello,我是 B");
        }
    }
 class A
    {
        public A()
        {
            Console.WriteLine("Build A");
        }
        public A(string name)
        {
            Console.WriteLine(name+"Build A(有参构造)");
        }
        public virtual void Hello()
        {
            Console.WriteLine("Hello,我是A");
        }
    }
 static void Main(string[] args)
        {

            B b = new B("祥子");

            Console.ReadLine();
        }

运行结果:

2.2关于base在派生类中调用基类的方法。

public class A
{
        public virtual void Hello()
        {
                Console.WriteLine("Hello");
        }
}
public class B : A
{
        public override void Hello()
        {
                base.Hello();//调用基类的方法,显示Hello
                Console.WriteLine("World");
        }
}

这样如果程序调用B.Hello()获得的效果将会使Hello World.

原文地址:https://www.cnblogs.com/schangxiang/p/11183074.html

时间: 2024-10-17 10:25:24

Base关键字用法的相关文章

【转】C#中base关键字的几种用法:base()

base其实最大的使用地方在面相对象开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法. 2.1关于base调用基类构造函数 public class A { public A() { Console.WriteLine("Build A"); } } public class B : A { public B() : base() { Console.WriteLine("Build B"); } static

C#基础知识之base关键字

前言 其实很早就想写关于C#基础,总是自己给自己找借口,或者去网上搜搜看看,现在想想觉得自己有点懒惰...  作为开发人员,基础知识是重中之重的,只有巩固.理解.实践才能提高自身的技能.同时也希望通过这个系列,能够帮助需要巩固基础的人. base关键字 调用基类已被派生类重写的方法 public class Father { public virtual void Say() { Console.WriteLine("Father Say"); } } public class Son

Java下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

C#中base 关键字的作用

引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建派生类实例时应调用的基类构造函数. 基类访问只能在构造函数.实例方法或实例属性访问器中进行. 从静态方法中使用 base 关键字是错误的. 一.在本例中,基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法.通过使用 base 关键字,可以从派生类中调

ava下static关键字用法详解

Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. jdk 1.5 中新增的静态导入 那么static 修饰的表示什么呢? 当创建一个类时,就是在创建一个新类型,描述这个类的对象的外观和行为,除

this与base关键字

this关键字 this关键字代表当前对象,通过this关键字可以访问当前对象的成员.(当前对象的成员:自己本身的成员+从父类继承过来的所有的成员.) this关键字可以访问:本类的所有成员和父类的非私有成员.父类的私有成员确实存在,但是就是访问不到. this关键字仍然代表的是对象,通过它可以点出对象中的除了父类的私有成员以外的所有成员. this关键字只能用在实例方法中. 作用: 1)代表当前对象.在实例方法中使用this关键字就代表当前对象.通过this关键字可以点出本类的所有成员和父类的

C++const关键字用法

const关键字是C++新引进的关键字,目标是用于定义常量,避免C语言中使用宏定义出现的边际问题,并且const是类型安全的,即const定义的是不可修改值的变量,它是有类型的,但是宏替换只是简单的进行字符串的替换,容易出现边际问题,造成错误.但是const的用法并不仅仅在此,因此整理一下,加深理解 C++const关键字用法

C++static关键字用法

一.static的作用有三种:限制变量或函数作用域.保持变量内容的持久.默认初始化为0 1.被static关键字修饰的全局函数或者变量具有文件作用域,即只在当前文件中可见. 2.被static修饰的变量会被存储在静态存储区,生命周期也为从定义直至程序结束.对于局部变量,即使在函数退出后该静态变量依然存在,然而却也无法访问.此外,static修饰的变量一生只会被初始化一次(这点经常被用作面试的小题,需注意). 3.正是因为被static修饰的变量会被存储在静态存储区,所以才有了这个一条.因为静态存

巨人大哥谈Java中的Synchronized关键字用法

巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就搞定 了,如果说不考虑性能问题的话,这一操绝对能应对百分之九十以上的情况,若对于性能方面有要求的话就需要额外的知识比如读写锁等等.本文目的先了解透彻synchronized的基本原理. Synchronized的基本使用 Synchronized的作用主要有三个: (1)确保线程互斥的访问同步代码