2016-04-09 22 views
-5

aşağıdaki örneği bulabilirsiniz:Neden ToString() yöntemi, C# içinde miras kalmadan, geçersiz kılınabilir?

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); 
    } 
} 

programından çıkış burada gösterilir:

Sınıfım # 0
Sınıfım nesne 1.
Sınıfım sizin gibi 2.

nesne nesne ToString() metodu, 'MyClass' sınıfında geçersiz kılınır ancak 'MyClass' herhangi bir sınıftan türetilmez, hiç miras kalmaz. Miras yoksa, 'geçersiz kılma' nasıl kullanılabilir?

size Kanunu altında pasajı gibi ') (HelloString' demek başka bir yöntemle Adına ToString() değiştirirseniz:

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; 
} 
} 

Derleyici hata atar:

'uygun bir yöntem geçersiz olduğu tespit'

Bu özel davranış neden 'ToString()' yöntemiyle?

+7

[object] öğesinden devralınacaksınız (https://msdn.microsoft.com/en-us/library/system.object (v = vs.110) .aspx). – LarsTech

cevap

6

https://msdn.microsoft.com/en-us/library/system.object(v=vs.110).aspx adresinden alınmıştır.

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

Bu yöntemin tanımlandığı Nesne'den türetilmiştir. Eğer

0

her tür OOP ve .ToString() metodu tarif thats ve sanal nesne elde edilir. Her sınıf Object'dan devralınır.

0

Object bir ToString() yöntemi vardır geçersiz böylece

0

ToString yöntem kalıtsaldır!

Tüm sınıfların dolaylı olarak devraldığı bir şey var. Ve yapılar da onlardan miras alırlar. Boks yoluyla, bu tür bir değişkene bir yapı atayabilirsiniz.

Bunun ne olduğunu tahmin edebilir misiniz?

It's Object !

Bu sınıf ToString, GetHashCode, kendi nesnenin kendi davranışlarını tanımlamak için geçersiz kılabilirsiniz Equals gibi yöntemler içerir. Daha burada görebilirsiniz:

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

0

Gerçekten, Sınıfım Object sınıfından türetilir.

class MyClass : Object 

kullanırsanız, sonuç aynıdır.

İlgili konular