Di mana atau kapan seseorang akan menggunakan namespace aliasing seperti
using someOtherName = System.Timers.Timer;
Bagi saya sepertinya itu hanya akan menambah kebingungan untuk memahami bahasa.
c#
namespaces
Brad
sumber
sumber
using int = System.Int32
di C #? Berguna, bukan? Ini penggunaan yang sama yang bisa dimanfaatkan di tempat lain.using int = System.Int32
, dan menggunakannya di tempat selain file deklarasi. Jadi iniint
keInt32
alias dapat dicapai dengan beberapa cara lain, atau merupakan hal khusus dalam compiler / runtime.using int = System.Int32
salah dan menyesatkan - itu salah karenaint
alias tidak diterapkan seperti yang Anda jelaskan. Ini menyesatkan karena Anda menyiratkan bahwa alias tipe dapat digunakan secara global, sama seperti bagaimanaint
digunakanInt32
.Jawaban:
Itu adalah tipe alias, bukan alias namespace; berguna untuk membedakan - misalnya, melawan:
(ps: terima kasih untuk pilihan
Timer
;-p)Jika tidak, jika Anda menggunakan keduanya
System.Windows.Forms.Timer
danSystem.Timers.Timer
dalam file yang sama, Anda harus tetap memberikan nama lengkap (karenaTimer
bisa membingungkan).Ini juga berperan dengan
extern
alias untuk menggunakan tipe dengan nama tipe yang sepenuhnya memenuhi syarat dari rakitan yang berbeda - jarang, tetapi berguna untuk didukung.Sebenarnya, saya dapat melihat penggunaan lain: ketika Anda menginginkan akses cepat ke suatu jenis, tetapi tidak ingin menggunakan yang biasa
using
karena Anda tidak dapat mengimpor beberapa metode ekstensi yang berkonflik ... agak berbelit-belit, tetapi ... berikut contohnya ...sumber
System.Timers.Timer
;-pSaya menggunakannya ketika saya memiliki beberapa ruang nama dengan sub ruang nama yang bertentangan dan / atau nama objek, Anda dapat melakukan sesuatu seperti [sebagai contoh]:
Yang seharusnya harus ditulis:
Ini menghemat banyak pengetikan dan dapat digunakan untuk membuat kode lebih mudah dibaca.
sumber
Selain contoh yang disebutkan, alias tipe (bukan alias namespace) bisa berguna saat berulang kali merujuk ke tipe generik:
Melawan:
sumber
Keringkasan.
Ada manfaat tambahan untuk memberikan kejelasan antara namespace yang memiliki nama tipe yang sama, tetapi pada dasarnya itu hanya gula.
sumber
Saya selalu menggunakannya dalam situasi seperti ini
dimana
Utility
seharusnya memiliki konteks yang berbeda (sepertiMyBaseNamespace.MySubNamespace.MySubSubNamespace.Utility
), tetapi saya berharap / lebih sukaUtility
untuk selalu menunjuk ke satu kelas tertentu.sumber
Ini sangat berguna ketika Anda memiliki beberapa kelas dengan nama yang sama di beberapa ruang nama yang disertakan. Sebagai contoh...
Anda dapat menggunakan alias untuk membuat kompiler senang dan membuat segalanya lebih jelas untuk Anda dan orang lain di tim Anda:
sumber
Kami telah mendefinisikan alias namespace untuk semua namespace kami. Ini membuatnya sangat mudah untuk melihat dari mana kelas berasal, misalnya:
dan
Kami telah menetapkan beberapa pedoman bagaimana alias harus diberi nama dan semua orang menggunakannya.
sumber
Saya menemukan alias sangat berguna dalam pengujian unit. Saat Anda menulis tes unit, adalah praktik umum untuk menyatakan subjek yang akan diuji sebagai
menjadi
myClassUT
subjek U nder T est. Tapi bagaimana jika Anda ingin tes tulis satuan untuk kelas statis dengan metode statis? Kemudian Anda dapat membuat alias seperti ini:Kemudian Anda dapat menulis pengujian unit Anda seperti ini:
dan Anda tidak akan pernah melupakan subjek yang diuji.
sumber
Di satu sisi, ini sangat berguna saat melakukan pengkodean di Visual Studio.
Kasus penggunaan : Katakanlah saya hanya menggunakan beberapa kelas misalnya
SqlConnection
dari namespaceSystem.Data
. Dalam kursus normal saya akan mengimporSystem.Data.SqlClient
namespace di bagian atas file * .cs seperti yang ditunjukkan di bawah ini:Sekarang lihat akal sehat saya. Ini sangat berkembang biak dengan banyak kelas untuk dipilih saat mengetik di editor kode. Saya tidak akan menggunakan banyak kelas sama sekali:
Jadi saya lebih suka menggunakan alias di bagian atas file * .cs saya dan mendapatkan tampilan intellisense yang jelas:
Sekarang lihat pandangan akal sehat saya. Ini sangat jernih dan sangat bersih.
sumber
Satu alasan saya tahu; Ini memungkinkan Anda menggunakan nama yang lebih pendek saat Anda memiliki benturan nama dari namespace yang diimpor. Contoh:
Jika Anda mendeklarasikan
using System.Windows.Forms;
danusing System.Windows.Input;
dalam file yang sama saat Anda mengaksesnya,ModifierKeys
Anda mungkin menemukan bahwa namaModifierKeys
tersebut ada di ruang namaSystem.Windows.Forms.Control
danSystem.Windows.Input
. Jadi dengan mendeklarasikanusing Input = System.Windows.Input;
Anda kemudian bisaSystem.Windows.Input.ModifierKeys
melaluiInput.ModifierKeys
.Saya bukan penggemar C # tetapi namespace aliasing sepertinya "praktik terbaik" bagi saya. Dengan begitu Anda tahu apa yang Anda dapatkan dan tetap tidak perlu mengetik terlalu banyak.
sumber
Anda dapat menggunakannya untuk mengubah kode dengan sangat mudah.
Sebagai contoh:
Dengan perubahan sederhana pada direktif Anda dapat memutuskan apakah seluruh kode Anda berfungsi di
float
ataudouble
.sumber