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。

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

2 つの別々のオブジェクトを取得しました。これが問題です。obj1 によって参照されるオブジェクトの基本クラス変数の値は、他に何も設定されていないため、0 です。そのオブジェクトを によって参照されるオブジェクトに結びつけるものは何もありませんobj

別のオブジェクトの変数にアクセスする必要がある場合は、データにアクセスしようとしているオブジェクトがそのオブジェクトを利用できるようにする必要があります。objメソッドに引数として渡すことも、プロパティにすることもできます。ここにはさまざまなアプローチがありますが、全体像が何であるか、つまり実際に何をしようとしているのかはわかりません. 期待どおりに機能しない理由を理解したら、実際に何をしようとしているのかを考え始めることができます。

明確にするために、これは継承とは何の関係もありません。2 つの異なるオブジェクトを作成することと関係があります1 つのクラスを使用しただけで、そのクラスの 2 つの異なるインスタンスを作成した場合でも、同じ効果が得られます。

于 2011-03-14T08:00:46.953 に答える