-1

以下に示す3つのクラスA、B、およびCがあります

public class A
{
    public void add(int i, int k)
    {
    }
}
public class B:A
{
    public void AddInt()
    {
        add(1, 2);
    }

}
public class C
{
    public void AddInt()
    {
        A objA = new A();
       objA.add(1, 2);
    }     

}

「A」クラス メソッド Add にアクセスしたい場合、2 つの方法があります

1) 「A」クラスを開始し、Add メソッドにアクセスします。

2) 「A」クラスを継承し、Add メソッドにアクセスする

これらの方法が両方とも同じ機能を提供する場合、なぜ C# は同じ機能を実現するために 2 つの方法を提供するのでしょうか。

4

6 に答える 6

52

クラスを開始することとクラスを継承することの違いは何ですか?

まず、探している単語はインスタンス化であり、開始ではありません。

クラスのインスタンス化とクラスの継承の違いは何ですか?

継承は、2つのクラス間の「一種の」関係を表します。

  • ニューヨークタイムズは一種の新聞です。
  • キリンは一種の動物です。
  • リンゴは一種の果物です。

これらのいずれの場合も、最初の種類は「より派生した」タイプであり、より具体的です。2番目の種類は「派生が少ない」タイプまたは「ベース」タイプです。より一般的です。リンゴよりも果物の方が多いです。

C#では、2つのクラス間に継承関係を確立すると、次の2つのことが得られます。

  • 割り当ての互換性:基本タイプの式が必要な場合は、より派生したタイプの式を使用できます。
  • メンバーの継承:基本クラスのすべてのメソッド、イベント、インデクサー、演算子、フィールド、プロパティ、およびネストされたタイプは、自動的に派生クラスのメンバーになります。(コンストラクタとデストラクタは継承できません)。

インスタンス化は、型の新しいインスタンスを作成するプロセスです。

  • ここで、今日のニューヨークタイムズのコピーをお渡しします。
  • ここで、キリンをあげましょう。
  • ここで、リンゴをあげましょう。

したがって、C#では:

class Fruit {}
class Apple : Fruit { } // Apple inherits from Fruit
class Program {
  static void Main() {
    Apple apple = new Apple(); // Instantiating a new Apple
  }
}

わかる?

于 2013-03-18T15:31:34.283 に答える
8

それはまったく問題C#ではなく、基本的なOOP概念に関するものでC#あり、この場合、オブジェクト指向強い型付けされた言語であることを単純に表しています。

「初期化」は、特定のタイプのインスタンスの作成ですA。あなたの場合。

2 番目の例はポリモーフィズムです。特定の型から派生し、A派生型 B を作成すると、クラスのパブリック/保護されたメンバーにアクセスできますA

この場合、アクセスの振る舞いは同じですが、その起源はまったく異なります。

于 2013-03-18T15:04:23.440 に答える
5

あなたは人間を食べ物と比較しています...そうです比較はありません

開始すると、システムの RAM がいくらか消費されます。

継承により、共通コードの再利用が可能になります

于 2013-03-18T15:08:30.840 に答える
3

クラスは、何かを構築する方法のテンプレートまたは計画と考えてください。次に、テンプレートまたは計画を使用して 1 つを構築する場合 (家の建築家の計画、およびそれらの計画から構築された多くの家の 1 つを考えてください)、このプロセスを説明するために使用する言葉は、「インスタンス化」および「初期化」です。

クラス テンプレートを使用してオブジェクトのインスタンスをインスタンス化し (家を建てる) (設計者の計画)、それを初期化します (家をペイントして装飾します)。

一方、継承は、クラスがどのように定義されるかという点で、まったく関係のないものを指し、別の既存のクラスを基礎として使用するか、基礎または基本クラスを拡張する新しいクラスの定義を開始する*base *line を使用します。あるクラスが別のクラスを継承する場合、派生クラスの「インスタンス」は、子で再定義することなく、親の基本クラスで定義されたすべてのものを自動的に取得することを意味します。

于 2013-03-18T15:05:56.413 に答える
3

メソッドがクラス A で public であるため、これら 2 つの方法を使用できますadd。継承されたクラスでのみ使用する場合は、protected に変更します。簡単に言うと、継承により、プライベートなものを除くすべてのプロパティとメソッドが継承されたクラスで使用可能になります。あなたの場合、クラスBはクラスから継承されA、クラスB自体のインスタンスはメソッドを呼び出すインスタンスになりますadd。クラスCでは、単にクラスのインスタンスを作成し、その上でAメソッドを呼び出しaddました。Access Modifiers and Inheritanceについて読んでおけば、この概念はすべてより明確になります。

于 2013-03-18T15:03:59.517 に答える
2

クラスはタイプであり、このタイプのオブジェクトを作成できるようにするテンプレートとして機能します。このようなオブジェクトの作成は、インスタンス化とも呼ばれます。このインスタンス化プロセスには、このオブジェクトにメモリを割り当て(allocation)、次にこのオブジェクトを初期化する、つまりフィールドに初期値を与えることが含まれます。後者は初期化と呼ばれます。

継承はまったく異なるものです。継承とは、基本クラス(スーパークラスまたは親クラスとも呼ばれます)から既存のコードを継承することにより、新しいクラス(テンプレート)を作成することです。この新しい派生クラス(サブクラスまたは子クラスとも呼ばれます)は、新しいタイプのオブジェクトを作成するためのテンプレートとして機能します。

派生クラスは、その基本クラスから継承された動作を変更し、その可能性を拡張できます。継承は、クラス間の関係を作成します。サブクラスは、継承階層でその上のスーパークラスと割り当て互換です。

于 2013-03-18T15:25:48.830 に答える