Itu selalu tepat tetapi pertimbangkan dengan hati-hati maksud di balik apa yang Anda tunjukkan
Pertanyaan yang lebih baik adalah bertanya:
Mengapa seseorang mengganti ToString ()?
ToString () adalah jendela menuju status objek. Penekanan pada negara sebagai persyaratan. Bahasa OOP yang kuat seperti Java / C # menyalahgunakan model OOP dengan merangkum semua yang ada di kelas. Bayangkan Anda membuat kode dalam bahasa yang tidak mengikuti model OOP yang kuat; pertimbangkan apakah Anda akan menggunakan kelas atau fungsi. Jika Anda akan menggunakannya sebagai fungsi (yaitu kata kerja, tindakan) dan status internal hanya dipertahankan sementara antara input / output, ToString () tidak akan menambah nilai.
Seperti yang telah disebutkan orang lain, penting untuk mempertimbangkan apa yang Anda keluaran dengan ToString () karena ini dapat digunakan oleh debugger atau sistem lain.
Saya suka membayangkan metode ToString sebagai parameter --help dari sebuah objek. Ini harus pendek, mudah dibaca, jelas, dan mudah untuk ditampilkan. Harus menampilkan apa benda itu adalah bukan apa yang dilakukannya . Dengan semua itu, mari pertimbangkan ...
Kasus Penggunaan - Parsing paket TCP:
Bukan tangkapan jaringan khusus tingkat aplikasi tetapi sesuatu dengan lebih banyak daging seperti tangkapan pcap.
Anda ingin membebani ToString () hanya untuk lapisan TCP sehingga Anda dapat mencetak data ke konsol. Apa yang termasuk di dalamnya? Anda dapat menjadi gila dan mengurai semua detail TCP (yaitu TCP rumit) ...
Yang meliputi:
- Port Sumber
- Pelabuhan Tujuan
- Nomor Urutan
- Nomor pengakuan
- Offset data
- Bendera
- Offset Jendela
- Checksum
- Pointer Mendesak
- Pilihan (saya bahkan tidak akan pergi ke sana)
Tetapi apakah Anda ingin menerima semua sampah itu jika Anda memanggil TCP.ToString () pada 100 paket? Tentu tidak, ini akan menjadi informasi yang berlebihan. Pilihan yang mudah dan jelas juga yang paling masuk akal ...
Ekspos apa yang orang ingin lihat:
- Port Sumber
- Pelabuhan Tujuan
Saya lebih suka output yang masuk akal yang mudah diurai oleh manusia selain YMMV .
TCP:[destination:000, source:000]
Tidak ada yang rumit, keluarannya bukan untuk diurai oleh mesin (kecuali orang-orang menyalahgunakan kode Anda), tujuan yang dimaksudkan adalah agar dapat dibaca oleh manusia.
Tapi bagaimana dengan semua info menarik yang saya bicarakan sebelumnya, bukankah itu berguna juga? Aku akan membahasnya tapi pertama-tama ...
ToString () salah satu metode paling berharga dan jarang digunakan sepanjang masa
Karena dua alasan:
- Orang tidak mengerti untuk apa ToString ()
- Kelas dasar 'Objek' kehilangan metode string lain yang sama pentingnya.
Alasan 1 - Jangan menyalahgunakan kegunaan ToString ():
Banyak orang menggunakan ToString () untuk menarik representasi string sederhana dari suatu objek. Manual C # bahkan menyatakan:
ToString adalah metode pemformatan utama di .NET Framework. Ini mengubah objek menjadi representasi stringnya sehingga cocok untuk ditampilkan.
Tampilan, bukan pemrosesan lebih lanjut. Itu tidak berarti, ambil representasi string saya yang bagus dari paket TCP di atas dan tarik port sumber menggunakan regex :: cringe ::.
Cara yang benar untuk melakukan sesuatu adalah, panggil ToString () langsung pada properti SourcePort (yang BTW adalah ushort sehingga ToString () seharusnya sudah tersedia).
Jika Anda memerlukan sesuatu yang lebih kuat untuk memaketkan status objek kompleks untuk penguraian mesin, Anda akan lebih baik menggunakan strategi serialisasi terstruktur.
Untungnya, strategi seperti itu sangat umum:
- Dapat diserialisasi (C #)
- Acar (Python)
- JSON (Javascript atau bahasa apapun yang mengimplementasikannya)
- SABUN MANDI
- dll ...
Catatan: Kecuali Anda menggunakan PHP karena, herp-derp, ada fungsi untuk itu :: snicker ::
Alasan 2 - ToString () tidak cukup:
Saya belum melihat bahasa yang menerapkan ini pada intinya, tetapi saya telah melihat dan menggunakan variasi pendekatan ini di alam liar.
Beberapa diantaranya adalah:
- ToVerboseString ()
- ToString (verbose = true)
Pada dasarnya, kekacauan berbulu dari status Paket TCP harus dijelaskan agar dapat dibaca manusia. Untuk menghindari 'mengalahkan kuda mati' berbicara tentang TCP, saya akan 'menunjukkan jari' pada kasus # 1 di mana menurut saya ToString () dan ToVerboseString () kurang dimanfaatkan ...
Kasus Penggunaan - Array:
Jika Anda terutama menggunakan satu bahasa, Anda mungkin merasa nyaman dengan pendekatan bahasa itu. Untuk orang-orang seperti saya yang beralih di antara bahasa yang berbeda, banyaknya pendekatan yang bervariasi bisa menjengkelkan.
Yaitu, berapa kali hal ini membuat saya kesal lebih besar dari jumlah gabungan semua jari dari setiap dewa Hindu.
Ada berbagai kasus di mana bahasa menggunakan peretasan umum dan beberapa yang melakukannya dengan benar . Beberapa membutuhkan penemuan roda kembali, beberapa melakukan pembuangan dangkal, yang lain melakukan pembuangan yang dalam, tidak satupun dari mereka bekerja seperti yang saya inginkan ...
Yang saya minta adalah pendekatan yang sangat sederhana:
print(array.ToString());
Output: 'Array [x]' atau 'Array [x] [y]'
Di mana x adalah jumlah item di dimensi pertama dan y adalah jumlah item di dimensi kedua atau beberapa nilai yang menunjukkan bahwa dimensi ke-2 tidak rata (kisaran min / maks mungkin?).
Dan:
print(array.ToVerboseString());
Menghasilkan keseluruhan she-bang dalam cetakan cantik karena saya menghargai hal-hal cantik.
Mudah-mudahan, ini menjelaskan topik yang telah membuat saya kesal sejak lama. Setidaknya saya menaburkan sedikit troll-umpan untuk para PHPers untuk meremehkan jawaban ini.
Console.WriteLine(obj.GetToStringItemsHeadings); Console.WriteLine(obj);
atau serupa.