A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xinchenglong 中级黑马   /  2013-8-26 22:24  /  1383 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

base 关键字用于从派生类中访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
从静态方法中使用 base 关键字是错误的。
所访问的基类是类声明中指定的基类。 例如,如果指定 class ClassB : ClassA,则无论 ClassA 的基类如何,从 ClassB 上
访问 ClassA 的成员。
示例
在本例中,基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法。 通过使用 base 关键字,可以从派生类中调用
基类的 Getinfo 方法。
C#
    public class Person
    {
        protected string ssn = "444-55-6666";
        protected string name = "John L. Malgraine";
        public virtual void GetInfo()
        {
            Console.WriteLine("Name: {0}", name);
            Console.WriteLine("SSN: {0}", ssn);
        }
    }
    class Employee : Person
    {
        public string id = "ABC567EFG";
        public override void GetInfo()
        {
            // Calling the base class GetInfo method:
            base.GetInfo();
            Console.WriteLine("Employee ID: {0}", id);
        }
    }
    class TestClass
    {
        static void Main()
        {
            Employee E = new Employee();
            E.GetInfo();
        }
    }
    /*
    Output
    Name: John L. Malgraine
    SSN: 444-55-6666
    Employee ID: ABC567EFG
    */

有关其他示例,请参见 new、virtual 和 override。
本示例显示如何指定在创建派生类实例时调用的基类构造函数。
C#
public class BaseClass
{
    int num;
    public BaseClass()
    {
        Console.WriteLine("in BaseClass()");
    }
    public BaseClass(int i)
    {
        num = i;
        Console.WriteLine("in BaseClass(int i)");
    }
    public int GetNum()
    {
        return num;
    }
}
public class DerivedClass : BaseClass
{
    // This constructor will call BaseClass.BaseClass()
    public DerivedClass() : base()
    {
    }
    // This constructor will call BaseClass.BaseClass(int i)
    public DerivedClass(int i) : base(i)
    {
    }
    static void Main()
    {
        DerivedClass md = new DerivedClass();
        DerivedClass md1 = new DerivedClass(1);
    }
}
/*
Output:
in BaseClass()
in BaseClass(int i)
*/
我想问的是从静态方法中使用 base 关键字是错误的,这句话不是很理解!!??

1 个回复

倒序浏览
1. base 关键字可带参数使用,也可不带参数使用;
2. 构造函数的任何参数都可用作 base 的参数,或用作表达式的一部分;
3. 即使没有创建类的实例,也可以调用该类中的静态方法、字段、属性或事件;
4. 如果创建了该类的任何实例,不能使用实例来访问静态成员;
5. 只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件;
6. 静态成员通常用于表示不会随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马