2016-04-09 12 views
-5

は、以下の例をご覧ください:なぜToString()メソッドはC#に継承されずにオーバーライドできますか?

using System; 

class MyClass 
{ 
    static int count = 0; 
    int id; 

    public MyClass() 
    { 
    id = count; 
    count++; 
    } 

public override string ToString() 
{ 
    return "MyClass object #" + id; 
} 
} 

class Test 
{ 
    static void Main() 
    { 
    MyClass ob1 = new MyClass(); 
    MyClass ob2 = new MyClass(); 
    MyClass ob3 = new MyClass(); 
    Console.WriteLine(ob1); 
    Console.WriteLine(ob2); 
    Console.WriteLine(ob3); 
    } 
} 

プログラムからの出力はここに示されています:

MyClassのは、#0
MyClassのオブジェクト#1
MyClassのは、あなたのよう#2

オブジェクトオブジェクトここで見ることができるメソッドToString()は、 'MyClass'という名前のクラスではオーバーライドされていますが、 'MyClass'はクラスから派生したものではないため、継承はまったくありません。継承がない場合、どのように 'オーバーライド'を使うことができますか?

私たちは、あなたが以下のコードのように「)(HelloString」を言う他のメソッド名にtoString()を変更した場合は、スニペット:

public class Program 
{ 
    public static void Main(string[] args) 
    {    
     MyClass ob1 = new MyClass(); 
     MyClass ob2 = new MyClass(); 
     MyClass ob3 = new MyClass(); 
     Console.WriteLine(ob1); 
     Console.WriteLine(ob2); 
     Console.WriteLine(ob3); 
    } 
} 

class MyClass 
{ 
    static int count = 0; 
    int id; 

    public MyClass() 
    { 
    id = count; 
    count++; 
    } 

public override string HelloString() 
{ 
    return "MyClass object #" + id; 
} 
} 

コンパイラはエラーをスローします。

「は、適切な方法を上書きすることがわかっていません」

'ToString()'メソッドでこの特殊な動作がなぜ発生するのですか?

+7

[オブジェクト](https://msdn.microsoft.com/en-us/library/system.object(v = vs.110).aspx)から継承しています。 – LarsTech

答えて

6

から取られた。https://msdn.microsoft.com/en-us/library/system.object(v=vs.110).aspx

Object class is the ultimate base class of all classes in the .NET Framework; it is the root of the type hierarchy.

Languages typically do not require a class to declare inheritance from Object because the inheritance is implicit.

Because all classes in the .NET Framework are derived from Object, every method defined in the Object class is available in all objects in the system. Derived classes can and do override some of these methods, including:

  • Equals - Supports comparisons between objects.
  • Finalize - Performs cleanup operations before an object is automatically reclaimed.
  • GetHashCode - Generates a number corresponding to the value of the object to support the use of a hash table.
  • ToString - Manufactures a human-readable text string that describes an instance of the class.
0

これは、そのメソッドが定義されているObjectから派生したものです。それ

0

あらゆるタイプはOOPと、toString()メソッドが定義されてthatsのその仮想物体に由来します。すべてのクラスはObjectから継承します。

0

ObjectToString()方法を有するオーバーライドできるよう

0

ToString方法は継承されたです!

すべてのクラスが暗黙的に継承することが1つあります。そしてそれから継承する構造体の種類も同様です。ボクシングを通じて、そのタイプの変数に構造体を割り当てることができます。

あなたはそれが何であるか推測できますか?

It's Object !

このクラスでは、あなたのオブジェクトの独自の振る舞いを定義するためにオーバーライドすることができToStringGetHashCodeEqualsのようなメソッドが含まれています。あなたはもっとここに見ることができます:

https://msdn.microsoft.com/en-us/library/system.object(v=vs.110).aspx

0

本当に、あなたのMyClassのは、Objectクラスから派生しています。使用している場合

class MyClass : Object 

結果は同じです。

関連する問題