4
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 是两个变量的默认值。

谁能告诉我,我怎样才能获得价值???

thx in adv..

4

2 回答 2

4

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

child obj1 = new child();

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

baseClass obj = new baseClass();

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

obj1.intF = 5;
obj1.intS = 4;

那么只有你会得到想要的结果。

于 2011-03-14T08:02:51.530 回答
2

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

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

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

于 2011-03-14T08:00:46.953 回答