Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tip
Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Desenler sizin için yeniyse desen eşleştirmeye genel bakış ile başlayın. Tam uyumluluk kuralları için dil başvurusundaki bildirim ve tür desenleri bölümüne bakın.
Giriş ifadesine tür deseni uygulanır. C# ifadeyi değerlendirir, ardından sonuçta elde edilen değerin null olmadığını ve çalışma zamanı türünün belirtilen türle uyumlu olup olmadığını test eder. Tür deseni yalnızca tür testinin başarılı olup olmadığını bildirir. Değişken bildirmez.
Evet ya da hayır sorusu sorun
Bir teslimat sisteminde, IRouteStop rota planlaması tarafından kabul edilen hedefler için bir yetenek sözleşmesidir.
CanRoute değerlendirilen hedefin bu özelliğe sahip olup olmadığını test eder ve Boole sonucu hedefin yol planlama iş akışına girip girmediğini belirler. İş akışı yalnızca evet ya da hayır yanıtına ihtiyaç duyar ve hiçbir route-stop üyesini okumaz; bu nedenle, yakalanan bir değişken içermeyen bir tür deseni uygundur.
static bool CanRoute(object? destination) =>
destination is IRouteStop;
Giriş ifadesi , destinationve IRouteStop test edilen türdür. Yanıt yalnızca evet ya da hayır olduğunda bir tür kalıbı seçin. Eşleşen dalın adresi okuması veya aracılığıyla IRouteStopbaşka bir üyeyi çağırması gerekiyorsa, dalın bu tür bir değişkene sahip olması için bunun yerine bir bildirim deseni seçin.
Note
destination is IRouteStop _ de görebilirsiniz. Bu söz dizimi, hiçbir değişkenin korunmadığı anlamına gelen bir bildirim desenidir _ . Her iki form da geçerli olduğunda aynı tür testi gerçekleştirir, ancak destination is IRouteStop yalnızca test amacını daha doğrudan belirtir.
Sınıfları ve arabirimleri eşleştirme
Teslim sisteminde, IRouteStop rota planlama hedefleri için yetenek sözleşmesini tanımlarken RouteStop , ortak rota durdurma verileri ve uygulaması sağlayan bir temel sınıftır.
ExpressRouteStop , öğesinden RouteStoptüretilen özel bir sınıftır. Örnek, çıkışının üç uyumlu türü de gösterebilmesi için değerlendirilen bir değeri test eder. Her test yalnızca Boole sonucuna ihtiyaç duyduğu için yakalanan değişken gerekmez.
interface IRouteStop { }
abstract class RouteStop(string street) : IRouteStop
{
public string Street { get; } = street;
public string GetDisplayName() => Street;
}
sealed class ExpressRouteStop(string street) : RouteStop(street)
{
}
static void ShowCompatibility()
{
object destination = new ExpressRouteStop("8 Oak Avenue");
Console.WriteLine($"Exact class: {destination is ExpressRouteStop}");
Console.WriteLine($"Base class: {destination is RouteStop}");
Console.WriteLine($"Interface: {destination is IRouteStop}");
}
Değerlendirilen değer bir ExpressRouteStopdeğeridir. Çıktı, tam sınıfıyla, RouteStop temel sınıfıyla ve RouteStop'nin uyguladığı IRouteStop arabirimiyle eşleştiğini gösterir.
Ayrıntılı uyumluluk kuralları ve uç durumlar için tür deseni başvurusuna bakın.
Birden çok türü yönlendir
Bir destek sisteminde SupportRequest, BillingQuestion ve PasswordResetRequest gibi özel istek sınıfları için temel sınıftır. Bir switch dalı, bir deseni, bu desen eşleştiğinde döndürülecek sonuçla eşleştirir. Her kol bir işlem kuyruğunun adını döndürür ve son kol, değerlendirilen diğer değerler için bir geri dönüş kuyruğu sağlar. Seçilen kuyruk yalnızca değerlendirilen değerin çalışma zamanı türüne bağlıdır; dolayısıyla isteğin hiçbir üyesi okunmadığından tür desenleri uygundur.
static string RouteRequest(object request) =>
request switch
{
PasswordResetRequest => "Identity queue",
BillingQuestion => "Billing queue",
SupportRequest => "General support queue",
_ => "Intake queue"
};
Her kol bir tür sorusu yanıtlar ve bu isteği işleyen kuyruğu döndürür. Bir kolun istek üyelerini okuması gerekiyorsa, değişkendeki eşleşen değeri yakalamak için bir bildirim deseni kullanın.
Anahtar kolları üstten alta doğru sıralanır. Özel bir sınıfı temel sınıfından önce yerleştirin. Aksi takdirde, temel sınıf kolu özel sınıfın her örneğini eşleştirebilir ve bu da sonraki kolun ulaşılamaz olmasını sağlar.
İsteğe bağlı: test edilen tür olarak bir tür parametresi kullanın
Bu isteğe bağlı örnek, genel türler ve yöntemler üzerine kuruludur. gibi TRequest bir tür parametresi, çağıranın sağladığı türün yer tutucusudur. Gelen istek grubu birkaç istek türü içerebilir ve çağıran, herhangi bir isteğin gizli olarak işlenmesi gerekip gerekmediğini sınamak için ConfidentialRequest sağlar. Boole sonucu, toplu işlemin tamamı için gizli işlemeyi seçer ve görünür bir durum iletisi oluşturur. Bir tür parametresine sahip tür örüntüsü uygundur; çünkü önemli olan yalnızca eşleşen bir isteğin mevcut olmasıdır, bu nedenle eşleşen nesnenin saklanması gerekmez.
static void ShowConfidentialBatchHandling()
{
object[] incomingRequests = [new BillingQuestion(), new ConfidentialRequest()];
bool requiresConfidentialHandling =
ContainsRequestOfType<ConfidentialRequest>(incomingRequests);
Console.WriteLine(requiresConfidentialHandling
? "Send the entire batch to confidential handling."
: "Send the batch to standard handling.");
}
static bool ContainsRequestOfType<TRequest>(IEnumerable<object> requests)
{
foreach (object request in requests)
{
if (request is TRequest)
{
return true;
}
}
return false;
}
Çağıranın eşleşen isteğin kendisine ihtiyacı varsa, eşleşen öğeleri döndüren bir arama veya filtre işlemi daha uygun olacaktır.