さてさて、私は現在勉強相続、と私は何かをやった、これはコードです私はできませんarr.Average() エラーは言う:Error 1 'ConsoleApplication1.array.arr' is inaccessible due to its protection level C:\Users\x\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 35 20 ConsoleApplication1
誰かが私は間違っていると私に教えてくれる? ヘルパーに感謝します!継承運動
継承運動
答えて
可視性の種類を指定していないため、arrはプライベートとして宣言されています。それをprotectedに変更すると、サブクラスのarray2がそのクラスにアクセスできるようになります。
protected int [] arr;
は、パブリックまたはARR変数に保護された追加:
public int [] arr;
protected int [] arr;
特に指定しない場合、コンパイラはあなたの宣言がプライベート作りにデフォルト設定されます。
ああそう!しかし、私はこのようにするのが良いでしょう: –
protected int [] arr;右? –
は代わりにprotectedを使用しているため、サブクラスのみがアクセスできます。他のクラスは、変数にアクセスするためにアクセサを使用する必要があります。 – Bart
arrのアクセスタイプを明示的に定義していないため、暗黙的にprivateに設定されています。派生クラスからこれをアクセスできるようにするには、それをprotectedに設定する必要があります。
protected int [] arr;
これを行うより良い方法があります。それは一般的な考えです。
@George Duckett修正をありがとう!私が何かを書くのが遅すぎる! ;) – csano
C#では、クラスメンバの既定のアクセスレベルはprivate
です。 int [] arr
のアクセスレベルを指定していないため、private
であり、他のクラスからアクセス可能です。
これは、arrフィールドがプライベートであるためです。このように、代わりに書き込みプライベート読み取り保護されたプロパティを使用することを検討してください:あなたの例では
class array
{
protected int[] arr {get; private set; }
public array(int[] arr)
{
this.arr = arr;
}
public int Biggest()
{
return arr.Max();
}
public int Min()
{
return arr.Min();
}
public int SumArr()
{
return arr.Sum();
}
}
class array2 : array
{
public array2(int [] arr):base(arr)
{
}
public double Average()
{
return arr.Average();
}
}
、あなたが修飾子自体を省略しているimplictly private
arr
配列を作りました。あなたがへのアクセスを提供したい場合は、あなたの派生クラスでfield
、あなたがprotected
のアクセス修飾子を使用する必要があるだろうと述べた。
protected int[] arr;
しかしフィールドが本当にあるべきように、フィールドをこのように公開することをお勧めしていませんプライベートクラス状態。あなたは何をすべきか、プロパティを経由して、そのフィールドへの読み取り専用アクセスをカプセル化である:あなたの派生クラスで意味
protected int[] Array {
get { return this.arr; }
}
、次のことができます。
public double Average()
{
return this.Array.Average();
}
このように?:protected int [] arr; protected int []配列 { を取得します。 { return this.arr; } } –
全体のポイントはこれだけのエクササイズです。あなたは1つの "推奨されない"練習(フィールドを直接公開しない)を別のものと置き換えようとしています。読み込み専用のプロパティの背後にあるフィールドを「隠していても」、あなたはまだ配列*を返していますが、これはとにかく変更可能です*。 – dlev
確かに、近い将来にこれらのことを知りたいのですが、これが大丈夫かどうかを知りたがっていますか? –
- 1. COM相互運用性と継承
- 2. プロパティ継承動作
- 3. BuildManager継承の継承
- 4. クラス継承とインターフェイス継承
- 5. データ継承の継承
- 6. シングルトン継承バギー動作
- 7. C++継承と動的ライブラリ
- 8. Javaでの動的継承
- 9. djangoモデルの自動継承
- 10. 間違っ継承動作
- 11. PHP動的クラス継承
- 12. テンプレートを継承した継承継承メンバ
- 13. CSSが継承しない継承
- 14. 反復子継承と継承* this
- 15. C++多重継承/仮想継承
- 16. 継承 - ターゲット固有の継承クラスC#
- 17. Vector :: Vectorの継承継承クラス
- 18. Entity Frameworkとの継承継承
- 19. 継承する継承するインターフェイス
- 20. 継承したクラスを継承する
- 21. 継承継承について
- 22. Java ORM:複数(継承)継承
- 23. 継承
- 24. 継承
- 25. 継承
- 26. 継承
- 27. 継承
- 28. 継承
- 29. 継承
- 30. 継承
その他が説明した問題(その編曲:プライベートですが)誰も尋ねることがありませんでした:なぜあなたの最初の継承は整数配列のラッパーですか?システムに組み込まれていないものをモデリングしてみてください。あなたはもっと多くを学ぶでしょう。がんばろう! – dlev