zoukankan      html  css  js  c++  java
  • 【转】C#中base关键字的几种用法:base()

    转:https://blog.csdn.net/cplvfx/article/details/82982862

    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 void Main()
        {
            B b = new B();
            Console.ReadLine();
        }
    }

    运行结果:

    Build A

    Build B

    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");
            }
        }

    运行结果:

    Hello

    World

    下面是我自己改进了一下上面的例子:

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

    运行结果:

    Hello

    Hello

    World

    关于Base:

    base 关键字用于从派生类中访问基类的成员:
    调用基类上已被其他方法重写的方法。
    指定创建派生类实例时应调用的基类构造函数。
    基类访问只能在构造函数、实例方法或实例属性访问器中进行。

    1. 在派生类中调用基类方法。

    public class BaseClass
    {
        protected string _className = "BaseClass";
        public virtual void PrintName()
        {
            Console.WriteLine("Class Name: {0}", _className);
        }
    }
    class DerivedClass : BaseClass
    {
        public string _className = "DerivedClass";
        public override void PrintName()
        {
            Console.Write("The BaseClass Name is {0}", base._className);
            //调用基类方法
           base.PrintName();
            Console.WriteLine("This DerivedClass is {0}", _className);
        }
    }
    class TestApp
    {
        public static void Main()
        {
            DerivedClass dc = new DerivedClass();
            dc.PrintName();
        }
    
    }
    }

    运行结果:

    The BaseClass Name is BaseClass

    Class Name: BaseClass

    This DerivedClass is DerivedClass

    2.在派生类中调用基类构造函数

        public class BaseClass
        {
            int num;
            public BaseClass()
            {
                Console.WriteLine("in BaseClass()");
            }
            public BaseClass(int i)
            {
                num = i;
                Console.WriteLine("in BaseClass(int {0})", num);
            }
        }
        public class DerivedClass : BaseClass
        {
            // 该构造器调用  BaseClass.BaseClass()
            public DerivedClass()
                : base()
            {
            }
            // 该构造器调用 BaseClass.BaseClass(int i)
            public DerivedClass(int i)
                : base(i)
            {
            }
            static void Main()
            {
                DerivedClass dc = new DerivedClass();
                DerivedClass dc1 = new DerivedClass(1);
                Console.ReadLine();
            }
        }

    运行结果:

    in BaseClass()
    in BaseClass(int 1)

    注意:
    从静态方法中使用 base 关键字是错误的。
    base 主要用于面向对象开发的对态这方面,在示例2中有体现。

    -----------------------------------------------------------------------------我是一条帅气的分割线-------------------------------------------------------------帅气--------------------------------------------------------------------------------------------------------------的--------------------------------分------------割--------------线--------------------------

    关于this

    this 关键字引用类的当前实例。
    以下是 this 的常用用途:
    限定被相似的名称隐藏的成员
    将对象作为参数传递到其他方法
    声明索引器

        class Employee
        {
            private string _name;
            private int _age;
            private string[] _arr = new string[5];
            public Employee(string name, int age)
            {
                // 使用this限定字段,name与age
                this._name = name;
                this._age = age;
            }
            public string Name
            {
                get { return this._name; }
            }
            public int Age
            {
                get { return this._age; }
            }
            // 打印雇员资料
            public void PrintEmployee()
            {
                // 将Employee对象作为参数传递到DoPrint方法
                Print.DoPrint(this);
            }
            // 声明索引器
            public string this[int param]
            {
                get { return _arr[param]; }
                set { _arr[param] = value; }
            }
        }
        class Print
        {
            public static void DoPrint(Employee e)
            {
                Console.WriteLine("Name: {0}
    Age: {1}", e.Name, e.Age);
            }
        }
        class TestApp
        {
            static void Main()
            {
                Employee E = new Employee("Hunts", 21);
                E[0] = "Scott";
                E[1] = "Leigh";
                E[4] = "Kiwis";
                E.PrintEmployee();
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine("Friends Name: {0}", E[i]);
                }
                Console.ReadLine();
            }
        }

    运行结果:

    Name: Hunts
    Age: 21

    Friends Name: Scott

    Friends Name: Leigh

    Friends Name: 

    Friends Name: 

    Friends Name: Kiwis

  • 相关阅读:
    安装Catia时连接SQLServer出错的解决
    解决“安装程序无法定位现有系统分区,也无法创建新的系统分区”的方法
    Windows 7中把FTP地址、常用程序添加到资源管理器的收藏夹下
    常用WebService一览表
    DetailsView用法
    GridView绑定实体类的子实体的字段
    html+css正常但是复制到aspx页面出现布局混乱的问题
    ASP.NETSqlConnection对象设置数据库连接池
    ASP.Net内容页访问母版页(MasterPage)属性
    gridview按钮列的下载功能
  • 原文地址:https://www.cnblogs.com/sggggr/p/11847731.html
Copyright © 2011-2022 走看看