menggunakan direktif
Direktif using
memungkinkan Anda untuk menggunakan jenis yang ditentukan dalam namespace layanan tanpa menentukan namespace layanan yang sepenuhnya memenuhi syarat dari jenis tersebut. Dalam bentuk dasarnya, direktif using
mengimpor semua jenis dari satu namespace layanan, seperti yang ditunjukkan dalam contoh berikut ini:
using System.Text;
Anda dapat menerapkan dua pengubah ke direktif using
:
- Pengubah
global
mempunyai efek yang sama dengan menambahkan direktifusing
yang sama ke setiap file sumber dalam proyek Anda. Pengubah ini diperkenalkan di C# 10. - Pengubah
static
mengimpor anggotastatic
serta jenis berlapis dari satu jenis daripada mengimpor semua jenis dalam namespace layanan.
Anda bisa menggabungkan kedua pengubah untuk mengimpor anggota statik dari jenis di semua file sumber dalam proyek Anda.
Anda juga bisa membuat alias untuk namespace layanan atau jenis dengan direktif alias using.
using Project = PC.MyCompany.Project;
Anda bisa menggunakan pengubah global
pada direktif alias using.
Catatan
Kata using
kunci juga digunakan untuk membuat using
pernyataan, yang membantu memastikan bahwa IDisposable objek seperti file dan font ditangani dengan benar. Untuk informasi selengkapnya tentang pernyataan tersebut, lihat using
pernyataan.using
Cakupan dari direktif using
tanpa pengubah global
adalah file tempat kemunculannya.
Direktif using
bisa muncul:
- Di awal file kode sumber, sebelum namespace layanan atau deklarasi jenis apa pun.
- Di namespace layanan apa pun, tetapi sebelum namespace layanan atau jenis apa pun yang dideklarasikan dalam namespace layanan tersebut, kecuali pengubah
global
digunakan, dalam hal ini direktif harus muncul sebelum semua namespace layanan dan deklarasi jenis.
Jika tidak, kesalahan kompilator CS1529 dihasilkan.
Buat direktif using
untuk menggunakan jenis di namespace layanan tanpa harus menentukan namespace layanan. Direktif using
tidak memberi Anda akses ke namespace layanan apa pun yang ditumpuk di namespace layanan yang Anda tentukan. Namespace layanan hadir dalam dua kategori: ditentukan pengguna serta ditentukan sistem. Namespace layanan yang ditentukan pengguna adalah namespace layanan yang ditentukan dalam kode Anda. Untuk daftar namespace layanan yang ditentukan sistem, lihat Browser .NET API.
pengubah global
Menambahkan pengubah global
ke direktif using
berarti bahwa penggunaan diterapkan ke semua file dalam kompilasi (biasanya proyek). Direktif global using
ditambahkan dalam C# 10. Sintaksnya adalah:
global using <fully-qualified-namespace>;
di mana namespace layanan yang sepenuhnya memenuhi syarat adalah nama namespace layanan yang sepenuhnya memenuhi syarat yang jenisnya dapat dirujuk tanpa menentukan namespace layanan.
Direktif using global bisa muncul di awal file kode sumber apa pun. Semua direktif global using
dalam satu file harus muncul sebelum:
- Semua direktif
using
tanpa pengubahglobal
. - Semua namespace layanan dan deklarasi jenis dalam file.
Anda bisa menambahkan direktif global using
ke file sumber apa pun. Biasanya, Anda harus menyimpannya dalam satu lokasi. Urutan direktif global using
tidak masalah, baik dalam satu file, atau di antara file.
Pengubah global
dapat dikombinasikan dengan pengubah static
. Pengubah global
bisa diterapkan ke direktif alias using. Dalam kedua kasus, cakupan direktif merupakan semua file dalam kompilasi saat ini. Contoh berikut memungkinkan penggunaan semua metode yang dideklarasikan dalam System.Math di semua file dalam proyek Anda:
global using static System.Math;
Anda juga dapat menyertakan namespace layanan secara global dengan menambahkan item <Using>
ke file proyek Anda, misalnya, <Using Include="My.Awesome.Namespace" />
. Untuk informasi lebih lanjut, lihat <Using>
item.
Penting
Templat C# untuk .NET 6 menggunakan pernyataan tingkat atas. Aplikasi Anda mungkin tidak cocok dengan kode dalam artikel ini, jika Anda telah meningkatkan ke .NET 6. Untuk informasi selengkapnya, lihat artikel mengenai Templat C# baru menghasilkan pernyataan tingkat atas
.NET 6 SDK juga menambahkan serangkaian arahan implisit global using
untuk proyek yang menggunakan SDK berikut:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Direktif global using
implisit ini mencakup namespace layanan yang paling umum untuk jenis proyek.
Untuk informasi selengkapnya, lihat artikel tentang Implisit menggunakan direktif
pengubah statik
Direktif using static
menamai jenis yang anggota statiknya serta jenis berlapis yang bisa Anda akses tanpa menentukan nama jenis. Sintaksnya adalah:
using static <fully-qualified-type-name>;
<fully-qualified-type-name>
adalah nama jenis yang anggota statik serta jenis berlapisnya bisa direferensikan tanpa menentukan nama jenis. Jika Anda tidak memberikan nama jenis yang sepenuhnya memenuhi syarat (nama namespace layanan lengkap bersama dengan nama jenis), C# menghasilkan kesalahan pengompilasi CS0246: "Jenis atau nama namespace layanan 'type/namespace' tidak dapat ditemukan (apakah Anda kehilangan menggunakan direktif atau referensi perakitan?)".
Direktif using static
berlaku untuk jenis apa pun yang mempunyai anggota statik (atau jenis berlapis), bahkan jika juga memiliki anggota instans. Namun, anggota instans hanya bisa dipanggil melalui instans jenis.
Anda bisa mengakses anggota statik dari jenis tanpa harus memenuhi syarat akses dengan nama jenis:
using static System.Console;
using static System.Math;
class Program
{
static void Main()
{
WriteLine(Sqrt(3*3 + 4*4));
}
}
Biasanya, saat Anda memanggil anggota statik, Anda memberikan nama jenis bersama dengan nama anggota. Berulang kali memasukkan nama jenis yang sama untuk memanggil anggota jenis dapat berakibat pada kode verbose dan tidak jelas. Misalnya, definisi kelas Circle
berikut merujuk banyak anggota kelas Math.
using System;
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * Math.PI; }
}
public double Area
{
get { return Math.PI * Math.Pow(Radius, 2); }
}
}
Dengan menghilangkan kebutuhan untuk secara eksplisit mereferensikan kelas Math setiap kali anggota direferensikan, direktif using static
menghasilkan kode yang lebih bersih:
using System;
using static System.Math;
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * PI; }
}
public double Area
{
get { return PI * Pow(Radius, 2); }
}
}
using static
hanya mengimpor anggota statik yang bisa diakses dan jenis berlapis yang dideklarasikan dalam jenis yang ditentukan. Anggota yang diwariskan tidak diimpor. Anda bisa mengimpor dari jenis bernama apa pun dengan direktifusing static
, termasuk modul Visual Basic. Jika fungsi tingkat atas F# muncul dalam metadata sebagai anggota statik dari jenis bernama yang namanya adalah pengidentifikasi C# yang valid, maka fungsi F# bisa diimpor.
using static
membuat metode ekstensi yang dideklarasikan dalam jenis yang ditentukan yang tersedia untuk pencarian metode ekstensi. Akan tetapi, nama metode ekstensi tidak diimpor ke dalam cakupan untuk referensi yang tidak memenuhi syarat dalam kode.
Metode dengan nama yang sama diimpor dari berbagai jenis dengan direktif using static
yang berbeda dalam unit kompilasi atau namespace layanan yang sama membentuk grup metode. Resolusi kelebihan beban dalam grup metode ini mengikuti aturan C# normal.
Contoh berikut menggunakan direktif using static
untuk membuat anggota statik kelas Console, Math, serta String tersedia tanpa harus menentukan nama jenisnya.
using System;
using static System.Console;
using static System.Math;
using static System.String;
class Program
{
static void Main()
{
Write("Enter a circle's radius: ");
var input = ReadLine();
if (!IsNullOrEmpty(input) && double.TryParse(input, out var radius)) {
var c = new Circle(radius);
string s = "\nInformation about the circle:\n";
s = s + Format(" Radius: {0:N2}\n", c.Radius);
s = s + Format(" Diameter: {0:N2}\n", c.Diameter);
s = s + Format(" Circumference: {0:N2}\n", c.Circumference);
s = s + Format(" Area: {0:N2}\n", c.Area);
WriteLine(s);
}
else {
WriteLine("Invalid input...");
}
}
}
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * PI; }
}
public double Area
{
get { return PI * Pow(Radius, 2); }
}
}
// The example displays the following output:
// Enter a circle's radius: 12.45
//
// Information about the circle:
// Radius: 12.45
// Diameter: 24.90
// Circumference: 78.23
// Area: 486.95
Dalam contoh, direktif using static
juga dapat diterapkan ke jenis Double. Menambahkan direktif tersebut akan memungkinkan untuk memanggil metode TryParse(String, Double) tanpa menentukan nama jenis. Namun, menggunakan TryParse
tanpa nama jenis membuat kode yang kurang dapat dibaca, karena menjadi perlu untuk memeriksa direktif using static
untuk menentukan metode TryParse
jenis numerik mana yang dipanggil.
using static
juga berlaku untuk jenis enum
. Dengan menambahkan using static
dengan enum, jenis tidak lagi diperlukan untuk menggunakan anggota enum.
using static Color;
enum Color
{
Red,
Green,
Blue
}
class Program
{
public static void Main()
{
Color color = Green;
}
}
menggunakan alias
Buat direktif using
alias untuk mempermudah kualifikasi pengidentifikasi ke namespace layanan atau jenis. Dalam direktif using
apa pun, namespace layanan atau jenis yang sepenuhnya memenuhi syarat harus digunakan terlepas dari direktif using
yang datang sebelumnya. Tidak ada alias using
yang bisa digunakan dalam deklarasi direktif using
. Misalnya, kode berikut menghasilkan kesalahan pengompilasi:
using s = System.Text;
using s.RegularExpressions; // Generates a compiler error.
Contoh berikut menunjukkan cara menentukan dan menggunakan alias using
untuk namespace layanan:
namespace PC
{
// Define an alias for the nested namespace.
using Project = PC.MyCompany.Project;
class A
{
void M()
{
// Use the alias
var mc = new Project.MyClass();
}
}
namespace MyCompany
{
namespace Project
{
public class MyClass { }
}
}
}
Direktif alias penggunaan tidak bisa memiliki jenis generik terbuka di sisi kanan. Misalnya, Anda tidak bisa membuat menggunakan alias untuk List<T>
, tetapi Anda bisa membuatnya untuk List<int>
.
Contoh berikut menunjukkan cara menentukan direktif using
dan alias using
untuk kelas:
using System;
// Using alias directive for a class.
using AliasToMyClass = NameSpace1.MyClass;
// Using alias directive for a generic class.
using UsingAlias = NameSpace2.MyClass<int>;
namespace NameSpace1
{
public class MyClass
{
public override string ToString()
{
return "You are in NameSpace1.MyClass.";
}
}
}
namespace NameSpace2
{
class MyClass<T>
{
public override string ToString()
{
return "You are in NameSpace2.MyClass.";
}
}
}
namespace NameSpace3
{
class MainClass
{
static void Main()
{
var instance1 = new AliasToMyClass();
Console.WriteLine(instance1);
var instance2 = new UsingAlias();
Console.WriteLine(instance2);
}
}
}
// Output:
// You are in NameSpace1.MyClass.
// You are in NameSpace2.MyClass.
Dimulai dengan C# 12, Anda dapat membuat alias untuk jenis yang sebelumnya dibatasi, termasuk jenis tuple, jenis penunjuk, dan jenis tidak aman lainnya. Untuk informasi selengkapnya tentang aturan yang diperbarui, lihat spesifikasi fitur.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat Menggunakan direktif di Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.
Untuk informasi selengkapnya tentang pengubah using global, lihat spesifikasi fitur using global - C# 10.