2

したがって、オブジェクト クラス、オブジェクト タイプがあり、オブジェクトはクラスのインスタンスです。3つの違いは何ですか?

例(簡略化):

Class Human {              //A class named 'Human'
//some code
}

Human boy = new Human();   // 'boy' is an object, or instance of the Human class.

ここで、オブジェクト クラスとオブジェクト タイプはどこに当てはまりますか? 「オブジェクト」という用語には、3 つの意味/用途があるという点であいまいに思えます。

4

10 に答える 10

13

まず、objectSystem.Objectは同義語です。同じ型名を書くには 2 つの方法しかありません。ここには 2 つの概念はありません。

objectそれがタイプであり、オブジェクトがタイプのインスタンスであると言うのは矛盾しているかどうかというあなたの質問については:

fishそれが動物の一種だと言ったとしましょう。そして、私があなたに (生きた) サーモンを手渡して、「それは魚だ」と言ったとします。では、私が「魚」を 2 つの矛盾した方法で使用していたと言えますか? 最初に、それfish分類体系の一部であると言い、次に「魚」は実際に生きている動物であると言いました. 混乱すると思いますか?あいまいですか?1 つは分類スキーム用で、もう 1 つは特定のインスタンス用です。

あいまいさに対処するのはおそらく難しいことではないと思います。fish文の文脈に基づいて、特定の魚が言及されているのか、それとも一般的なカテゴリが言及されているのかを判断します。実際、カテゴリの名前とそのカテゴリのインスタンスの名前が同じものであることは、おそらく非常に自然なことのように思われます。newspapers一般的なカテゴリを表す単語と、特定の新聞全体を表す別の単語などがあるとしたら、奇妙に思えるでしょう。

オブジェクト、同じこと。「魚」がカテゴリとカテゴリのメンバーの両方を意味するように、「オブジェクト」も同様です。

オブジェクトをインスタンスとして参照する場合は「オブジェクト」と言い、タイプを参照する場合はobject. それが私がすることです。

于 2013-03-19T20:34:17.803 に答える
3

System.Objectobjectはエイリアスであるクラスです。どちらも型です (各クラスは型ですが、各型がクラスであるわけではありません)。

「オブジェクト」という用語は、通常、型のインスタンスも指します。したがって、2 つの異なるものしかありません (意味は関連していますが、.NET 型システムの特定の名前の型名と、その型システムの型のインスタンスを示す一般的な用語です)。

今では混乱します:

object o;

これはタイプoオブジェクトobjectです。聖なる牛!

于 2013-03-19T20:29:15.957 に答える
0

オブジェクトクラス:.NET Frameworkクラス階層内のすべてのクラスをサポートし、派生クラスに低レベルのサービスを提供します。これは、.NETFrameworkのすべてのクラスの究極の基本クラスです。これは、型階層のルートです。

オブジェクトタイプ:オブジェクトタイプは、.NETFrameworkのオブジェクトのエイリアスです。C#の統合型システムでは、事前定義型とユーザー定義型、参照型と値型のすべての型が、オブジェクトから直接または間接的に継承されます。オブジェクト型の変数には、任意の型の値を割り当てることができます。

オブジェクト:オブジェクトはインスタンスメンバーで構成され、その値によって同様のオブジェクトセット内で一意になります。C#コードで使用されるすべてのオブジェクトは、オブジェクトタイプです。オブジェクトがインスタンス化されると、メモリブロックが割り当てられ、オブジェクトの基礎となるクラスによって提供されるブループリントに従って構成されます。

主にmsdnから。あなたはそれをチェックするべきです:http: //msdn.microsoft.com/en-us/library/67ef8sbd.aspx

それが役に立てば幸い。

于 2013-03-19T20:44:09.033 に答える
0

まずSystem.Object、.NET のすべてのクラスの基本クラスです。
次に、オブジェクトはクラスのインスタンスです。これは、インスタンスの動作 (メソッド) とデータ (インスタンスに ID を与え、他のインスタンスと区別するため) を記述するクラスがあることを意味します。

于 2013-03-19T20:29:33.363 に答える
0
// 'boy' is an object, or instance of the Human class.

両方!ドキュメントによると。

これは、.NET Framework のすべてのクラスの最終的な基本クラスです。これは型階層のルートです。

したがって、すべての型のすべてのインスタンスは .NET のオブジェクトです。

また、object単なるエイリアスSystem.Objectです。2つは同義語です。

于 2013-03-19T20:29:41.963 に答える
0

「オブジェクト」は、他のすべてのクラスをサポートする C# クラスです。GetType、Equals、ToString などの一連のメソッドにアクセスできます。

基本的に、人間のオブジェクトは「オブジェクト」クラスから継承し、「オブジェクト」が持つすべてのメソッドにアクセスできます。

これを型 (int など) として使用すると、気の利いた不適切なことを行うことができます。たとえば、次の配列を作成できます。

static void Main(string[] args)
    {
        object[] array = new object[4];
        array[0] = 1;
        array[1] = "1";
        array[2] = new object();
        array[3] = new StreamWriter(@"C:\file.txt");

        foreach (object o in array)
        {
            if (o != null)
            {
                Console.WriteLine("Found an object!  It's type is: " + o.GetType());    
            }
            else
            {
                Console.WriteLine("Didn't find an object");
            }
        }
        Console.ReadLine();
    }

これにより、出力が得られます-

ここに画像の説明を入力

これにより、(オブジェクト以外に) 型を共有しないオブジェクトの配列が得られます! 彼らが学校で教えていることは絶対にありません。また、絶対にしないでください。

于 2013-03-19T20:30:03.483 に答える
0
  • Aclass インスタンスを定義し、通常は (とともにstructs) として参照されTypesます。これらは、それらのインスタンスの動作のテンプレートとして機能します。ATypeは別の から動作を「継承」できますType。これが継承の原則です。たとえば (おそらく悪い例ですが)、 aBoyは のサブタイプですHuman
  • インスタンスの動作は、Typethey are によって定義され、(通常)new演算子を使用して作成されます。
  • any のすべてのインスタンスは、簡略表現を持つ のTypeインスタンスでもあります。System.Objectobject
于 2013-03-19T20:30:40.920 に答える
0

たまたま Object という名前のクラスであるObject クラスが .net にあります。これは、すべてのクラスが派生する基本クラスです。これは、定義された新しいクラスは、Object クラスのすべてのメンバー (例の Human クラスを含む) にアクセスできることを意味します。

オブジェクトがクラスのインスタンスであると言うのは正しいです。奇妙に聞こえるかもしれませんが、Objectクラス オブジェクトが存在する可能性があります。例:

Object o = new Object();
       ^object
^class/type

ネーミングで少し混乱しますが、うまくいけばそれは理にかなっています。

私はいつも、タイプはクラスまたはプリミティブを説明できる用語であると考えてきました。そうintまたはObjectタイプである可能性がありますが、o私の例からではありません。

于 2013-03-19T20:30:57.210 に答える
0

クラスは、オブジェクトを定義するコード ブロックです。

class MyObject
{
    //Code that defines what the object is and how it behaves
}

「オブジェクトのインスタンス」は、クラスで定義されたオブジェクトを使用しようとしたときに得られるものです。

MyObject foo = new MyObject();

「タイプ」は、使用しているオブジェクトの種類の説明です。その名前は、上記の「クラス」ブロックの先頭にあります。

Console.WriteLine(foo.GetType().Name);

上記の行は「MyObject」を出力します。

TL;DR: 「クラス」、「オブジェクト」、「タイプ」はすべて意味が非常に似ているため、コードを記述する際にしばしば交換されます。それらのそれぞれは、オブジェクト指向プログラミングにおけるオブジェクトの定義に直接関係しています。

于 2013-03-19T20:37:40.287 に答える
0

objectオブジェクトを保持するのではなく、「オブジェクト ID」を保持するものとして、各クラス型の格納場所 (型の変数またはその他のクラス型がそのように修飾されます) を考えると役立つ場合があります[「参照」という用語には多くの意味があります。 ; 「オブジェクトID」という用語は、そのあいまいさを回避します]。多くの .net 言語では、オブジェクト ID でできることはあまりありませんが、ID によって参照されるオブジェクトでやりたいことが無数にある.ため、オブジェクト ID に演算子を適用するとメンバーにアクセスします。その ID によって参照されるオブジェクトの。

オブジェクト ID にはテキスト表現がないことに注意してください。ただし、概念的には、オブジェクト ID に任意の番号を割り当てると便利な場合があります。はクラスCar型であり、FordFocusはそれから派生したクラス型であるとします。ステートメント

Car Fred = new FordFocus();

未使用のオブジェクト ID を選択し (たとえば、#42 を選択するとします)、その ID を持つ FordFocus クラスの新しいインスタンスを生成し、その ID を に格納しますFred。のインスタンスも のインスタンスもFred保持できないことに注意してください。代わりに、それが保持できるのはオブジェクト ID だけです。それが何かを識別する場合、いずれかのインスタンスまたはそれから派生したクラスを識別することが保証されます。この特定のシナリオでは、#42 を保持しています。コードが次のように言う場合:FordFocusCarCar

Object Barney = Fred;

このコードは、Fred に格納される可能性のあるオブジェクト ID を Barney に安全に格納できるかどうかを確認し、格納できると判断して、Barney を #42 に設定します。

コードが言う場合

Fred.Color = Blue;

コードは実際には影響しませんがFred(ステートメントの前に "#42" を保持し、その後も "#42" を保持し続けます)、オブジェクト #42 に影響を与え、青い車に変えます。

その時点で、コードが次のようになっている場合:

Fred = new HyundaiSonata();

システムは新しい ID (例: #57) を生成し、その ID を使用して HyundaiSonata のインスタンスを作成し、#57 を Fred に格納します。このステートメントは Fred の値を上書きします (以前は #42 を保持していましたが、現在は #57 を保持しています) が、Object #42 (まだ青い FordFocus である) には影響しません。

于 2013-03-19T21:54:10.450 に答える