【问题标题】:access base class variable in derived class访问派生类中的基类变量
【发布时间】:2011-07-14 20:09:00
【问题描述】:
class Program
{
    static void Main(string[] args)
    {
        baseClass obj = new baseClass();
        obj.intF = 5;
        obj.intS = 4;
        child obj1 = new child();
        Console.WriteLine(Convert.ToString(obj.addNo()));
        Console.WriteLine(Convert.ToString(obj1.add()));
        Console.ReadLine();
    }
}
public class baseClass
{
    public int intF = 0, intS = 0;
    public int addNo()
    {
        int intReturn = 0;
        intReturn = intF + intS;
        return intReturn;
    }
}
class child : baseClass
{
    public int add()
    {
        int intReturn = 0;
        intReturn = base.intF * base.intS;
        return intReturn;
    }
}

无论我输入什么,我都想访问子类中的 intF 和 intS。但我总是得到两个变量的值 0。0 是两个变量的默认值。

谁能告诉我如何获得价值???

谢谢。

【问题讨论】:

    标签: c# variables base derived


    【解决方案1】:

    是的,您应该得到零,因为您创建了子类的单个实例并且没有为其继承的变量分配任何值,

    child obj1 = new child();
    

    您已经分别实例化了另一个基类实例并为其成员赋值,

    baseClass obj = new baseClass();
    

    运行时基类实例和子实例都是完全不同的对象,因此您应该像

    一样分别分配子值
    obj1.intF = 5;
    obj1.intS = 4;
    

    只有你才能得到想要的结果。

    【讨论】:

      【解决方案2】:

      你有两个单独的对象——这就是问题所在。 obj1 引用的对象中的基类变量的值 0,因为它们没有被设置为任何其他值。没有什么可以将该对象与obj 引用的对象联系起来。

      如果您需要访问另一个对象的变量,您必须将该对象提供给试图访问数据的对象。您可以将obj 作为参数传递给方法,或者将其设为属性。这里有很多不同的方法,但我们不知道更大的图景是什么——你真正想要做什么。一旦您了解了为什么它没有按照您的预期工作,您就可以开始考虑您真正想要做什么。

      需要明确的是,这与继承无关。 一切都与您创建两个不同的对象有关。如果您只使用一个类,但创建该类的两个不同实例,您将获得相同的效果。

      【讨论】:

      • 实际上我想做两个相加,然后用继承相乘。
      • @sam:继承如何在这里发挥作用?这不像您要覆盖任何行为或类似的东西。
      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2014-03-13
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多