2

これら2つの割り当ての違いは何ですか? A は Base から継承します。

Base b = new A();
A c = new A();

2番目がタイプAとして宣言されている場合、これが機能する理由がわかりません。

List<Base> vals = new List<Base>();
values.Add(b);
values.Add(c);

これをさらに理解するには、何を調べればよいですか?

4

6 に答える 6

2

継承は is a関係を構成します: Ainheritsの場合、 は許​​可されている場所ならどこにでも移動できることBaseを意味します。これはまさにコード スニペットが示しているものです。 のインスタンス、 のサブクラスを のサブクラス移動できる場所に追加できます。ABaseABaseList<Base>Base

于 2012-11-30T02:47:25.283 に答える
1

これは、継承が推移的であるためです。MSDNが言うように

ClassC が ClassB から派生し、ClassB が ClassA から派生した場合、ClassC は ClassB および ClassA で宣言されたメンバーを継承します。

したがって、あなたの場合、 からA継承するためBaseA「is-a」Baseであるため、 a に追加できますList<Base>。そのリストのすべての要素は になりますBase

于 2012-11-30T02:48:07.920 に答える
0

2つのステートメントは私には明らかです。最初の例では、1つの特殊化のようにインスタンス化されているプリミティブオブジェクトBaseがあるためです。そして2つ目では、Aは独自のタイプのようにインスタンス化されています。覚えておかなければならないのは、Aタイプもベースタイプであるということです。この機能はポリモーフィズムと呼ばれます。あなたはhttp://en.wikipedia.org/wiki/Polymorphism_in_object-Oriented_programmingでもっと何かを読むことができます

于 2012-11-30T02:51:10.440 に答える
0

継承に関するこれらの質問は、C# および実際にはすべてのオブジェクト指向言語の基本です。Pro C# 5.0 and the .NET 4.5 Framework, Sixth Editionまたは、 Microsoft C# チュートリアル などの無料のオンライン チュートリアル や、こちらのc#などの優れた本から始める必要があり ます。www.pluralsight.com を参照してください。約 30 ドル / 月で、専門家による素晴らしいビデオがいくつかあります。月額 50 ドルでエクササイズをダウンロードできます。

質問に戻ります。AとBを入れ替えてみよう

//Base Class A is Animal.  Class B might be a Bird. 
Animal A = new bird();   // but A has visibility of or can access the features common to all animals Ie access a bird but with a narrower view.
Bird C  = new Bird() ; works for the obvious reason. 

but thats just the beginning...

抽象クラスと仮想クラスおよびプロパティを考慮する必要があります。プロパティのオーバーライド。そして、あなたの例にはリストがあるので、COVARIANCE の質問に出くわすことさえあります。

実際には、深いところにジャンプします... http://msdn.microsoft.com/en-us/vstudio/ee672314 共分散と反分散。味見するだけです。

最近 (過去 12 か月) に c# を学んだので、本気なら、上記のような本やビデオ コースを読むことをお勧めします。検索すると、C# の質問に関する多くの情報が見つかります。

あなたが何気ない興味を持っているなら、私は何を提案すればよいかわかりません.

于 2012-11-30T03:15:18.260 に答える
0

C を vals に追加すると、コンパイラは自動的に C を OOP の Base にキャストします -> 子から親にキャストします => 問題ありません

于 2012-11-30T02:53:45.170 に答える
0
Base b = new A(); 

A は Base を実装しているため、これは有効です。

b は、Base のプロパティとメソッドのみを持ちます。

ただし、違いは、b を A にキャストしてから、A のプロパティとメソッドを使用できることです。

于 2012-11-30T02:57:44.963 に答える