1

C# の単純継承について質問です。

コードは次のとおりです。

  class Mammal
  {
    int age { get; set; }

    public Mammal(int age)
    {
      this.age = age;
    }
  }

  class Dog : Mammal
  {
    string breed { get; set; }

    public Dog(int age, string breed)
    : base(age)
    {
      this.breed = breed;
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      Dog joe = new Dog(8, "Labrador");
      Console.WriteLine("Joe is {0} years old dog of breed {1}", joe.age, joe.breed); // gives error
    }
  }

これは、年齢と品種のパラメーターにアクセスできないため、エラーになります。そのため、哺乳類と犬のクラスでそれぞれ年齢と品種を公開しています。これにより、プログラムが正常に実行されます。

しかし、私の質問は、理想的にはパラメーターを非公開または非公開にし、公開メソッドを介してのみアクセスするべきではありませんか? その場合、Program クラスの非公開パラメーターにアクセスするにはどうすればよいですか?

ありがとう

4

5 に答える 5

4

あなたのコードでageは、breedプロパティです。getとのメソッドへのアクセスをset個別に制御するには、 を記述しpublic get; private set;ます。それはあなたが望むものを達成するでしょう!

さらに、作成後にオブジェクトの年齢と種類を変更することがプログラムで意味があるかどうかを検討してください。そうでない場合は、それらをpublic readonlyフィールドにすることができます。

于 2013-08-23T03:19:18.753 に答える
0

答えhow can I access the non-public parameters in Program classは、派生クラスとインスタンス化されたクラスに公開されるメンバー変数、プロパティ、およびメソッドを制御できるため、(リフレクションを行わないと) できないということです。

データのカプセル化は良いことであり、アクセスできないクラス内のデータを変更できる呼び出しコードのリスクを軽減するために使用する必要があります。

于 2013-08-23T03:22:00.683 に答える
0

アクセス修飾子を提供していないため、デフォルトのアクセスが使用されます。ただし、ほとんどの場合、ロジックは正しいです。できるだけ隠す必要があります。実際には、状況に応じて、publicゲッターとprivateセッターを提供する場合と提供しない場合があります。取得するポイントは、正しい結果が得られる限り、好きなことを自由に行うことができるということです。

ここで C# を使用すると、ゲッターとセッターを介してのみ (もちろん暗黙的に) 常にアクセスされる変数を作成することができます。これは、あまり頻繁に実装されることはありませんが、実際には最善の方法だからです。

だからここに:

[アクセス] [タイプ] [名前] { [アクセス]get; [アクセス]セット; }

パラメータへのアクセスを制御することはできますが、パラメータ自体表示されます。また、明らかにそれを行ったために、表示する必要のない特定のフィールドを非公開にすることもできますが、これはあまり実装されていない方法です。MyClass.Something = somethingElse;多くの場合、変数はアクセスに関係なく何らかの形式の検証を行うため、上記のようなプライベート パラメーターを使用すると、検証をセッターに格納でき、 orを使用してより単純な構文を使用できるため、使用するのに有利ですSystem.Console.Write(MyClass.Something);

于 2013-08-23T03:23:41.423 に答える
0

privatepublicすべてのユーザーからアクセスできるようにする場合、またはprotected継承クラスでのみプロパティ/変数/メソッドにアクセスできるようにする場合は、これを作成する必要があります。

于 2013-08-23T03:19:00.610 に答える