IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

C# Desen Eşleştirme İfadeleri (Geliştiriciler için Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 21 Nisan 2026

C#'ta kalıp eşleştirme, C# 7.0'da tanıtılan ve sonraki sürümlerde daha da geliştirilen güçlü bir özelliktir. Bu özellik, geliştiricilerin koşullu ifadelerle, tip denetimle ve nesne dekompozisyonyuyla uğraşırken daha özlü ve ifadeli kod yazmasını sağlar.

Kalıp eşleştirme ifadeleri, değerleri kalıplara karşı eşleştirmenin ve karşılık gelen kod bloklarını çalıştırmanın esnek ve sezgisel bir yolunu sunar. Bu makalede, C#'ta kalıp eşleştirme ifadelerinin inceliklerini, sözdizimlerini, kullanım örneklerini ve kod örneklerini keşfedeceğiz. Makalenin sonunda, IronPDF PDF Oluşturma Kütüphanesi hakkında Iron Software üzerinden C# uygulamalarında hızlıca PDF belge oluşturma üzerine de biraz keşif yapacağız.

Benefits of Pattern Matching in C#

C# kodunda kalıp eşleştirme çok sayıda avantaj sunar:

  • Gelişmiş Okunabilirlik: Kalıp eşleştirme, karmaşık koşullu mantığı basitleştirir, bu da hem sizin hem de diğer geliştiricilerin kodunuzu daha kolay anlamasını ve takip etmesini sağlar.
  • Kod Satırı Azaltımı: Detaylı koşullu ifadeleri basit kalıplara yoğunlaştırarak, kalıp eşleştirme kod tabanınızı streamline eder, bu da daha az kod satırına ve daha özlü bir uygulamaya yol açar.
  • Sürdürülebilirliğin İyileştirilmesi: Kalıp eşleştirmenin sunduğu açıklık, kodun daha kolay bakımı ve hatalarının giderilmesini teşvik eder. Kalıpların açıkça deline edilmesiyle, belirli mantık bloklarını bulmak ve gerektiğinde değiştirmek daha basit hale gelir, diğer kod tabanını etkilemeden.
  • Daha İfade Edici Algoritmalar: Kalıp eşleştirme, geliştiricilere algoritmaları daha doğal ve sezgisel bir şekilde ifade etme gücü verir. Kod yapılarının sorun çözme paradigmasıyla hizalanmasıyla, kalıp eşleştirme algoritmalarının fikir modellerine çok yakın bir biçimde oluşturulmasını kolaylaştırır.

Types of Pattern Matching in C#

Kalıp eşleştirme, aşağıdaki ifadeler tarafından desteklenir:

  • is ifadesi
  • switch deyimleri
  • switch ifadeleri

Aşağıdaki kalıplar, yapılarla eşleştirmek için kullanılabilir:

Deklarasyon ve Tip Kalıpları

Deklarasyon ve tip kalıpları, C#'ta ifade çalışma zamanı türlerinin verilen türlerle uyumluluğunu kontrol etme için vazgeçilmez araçlardır. Deklarasyon kalıplarıyla, hem uyumluluğu kontrol edebilir hem de aynı anda yeni bir yerel değişken ilan edebilirsiniz. Aşağıdaki örneğe bakın:

object greeting = "Iron Software is Awesome!";
if (greeting is string message)
{
    Console.WriteLine(message.ToLower());  // output: iron software is awesome!
}

Burada, bildirim deseni, greeting ifadesi string türüne uyarsa, message değişkenine atanmasını ve ardışık işlemlerin yapılmasını sağlar.

Aşağıdaki koşullardan herhangi biri doğru olduğunda, Deklarasyon Deseni iyi çalışır:

  • İfadenin çalışma zamanı türü T'dir.
  • İfadenin çalışma zamanı türü T'ten türemiştir, T arayüzünü uygular veya T'ya örtük olarak dönüştürülebilir.
  • İfadenin çalışma zamanı türü, temelde yatan türü T olan boş değerlendirilebilir (nullable) bir değer türüdür.
  • İfadenin çalışma zamanı türünden T türüne bir boxing veya unboxing dönüşümü vardır.

Yukarıdaki koşulları gösteren aşağıdaki örneği düşünün:

int? nullableX = 8;
int y = 45;
object boxedy = y;
if (nullableX is int a && boxedy is int b)
{
    Console.WriteLine(a + b);  // output: 53
}

Burada, nullableX desene uyar çünkü temelde yatan tür int olan boş değerlendirilebilir bir değer türüdür ve boxedy desene uyar çünkü int'ya unbox edilebilir.

Yeni bir değişken tanımlamadan ifadenin türünü kontrol etmek istediğinizde aşağıdaki örnekte görüldüğü gibi, çöp (discard) _'ı kullanabilirsiniz.

public static decimal CalculateToll(Vehicle vehicle) => vehicle switch
{
    Bus _ => 4.00m,
    Motor _ => 8.50m,
    null => throw new ArgumentNullException(nameof(vehicle)),
    _ => throw new ArgumentException("Unknown type of a vehicle", nameof(vehicle)),
};

Bu kesitte, _ Vehicle ile eşleşen herhangi bir tür için bir yer tutucu görevi görür.

Deklarasyon ve tip kalıpları, ifade uyumunun kalıp eşleştirme öncesi geçersiz olmadığını garantiler. Aşağıda gösterildiği gibi, null olmayan kontrollar yapmak için bir negated null constant pattern kullanabilirsiniz:

if (inputVal is not null)
{
    // ...
}

Bu olumsuzlama, inputVal null olmadığından emin olarak daha fazla işlemlere devam eder.

C# kodunda deklarasyon ve tür kalıplarını kullanarak, okunabilirliği artırabilir, kod satırlarını azaltabilir ve algoritmaları daha etkili bir şekilde ifade edebilirsiniz. Bu kalıplar, tür bazlı mantığı ele almak ve kod tabanınızın sürdürülebilirliğini iyileştirmek için özlü ve ifade edici bir yol sağlar.

Sabit Desen

Sabit desenler, bir ifade sonucunun belirli bir sabit değerle eşleşip eşleşmediğini doğrulamak için kullanılır. Aşağıdaki örneğe bakın:

public static decimal GetGroupTicketPrice(int visitorCount) => visitorCount switch
{
    1 => 2.0m,
    2 => 10.0m,
    3 => 25.0m,
    4 => 60.0m,
    0 => 0.0m,
    _ => throw new ArgumentException($"Not supported number of visitors: {visitorCount}", nameof(visitorCount)),
};

Burada, sabit desenler visitorCount ifadesinin belirtilen sabit değerlerle eşleşip eşleşmediğini kontrol eder ve buna karşılık gelen bilet fiyatlarını döndürür.

Bir sabit desende, çeşitli türde sabit ifadeler kullanabilirsiniz, örneğin:

  1. Tamsayı veya kayan nokta sayısal literalleri.
  2. Karakterler.
  3. Dize literalleri.
  4. Boolean değerleri (true veya false).
  5. Enum değerleri.
  6. Tanımlanmış bir const alan veya yerel ismi.
  7. null.

Span<char> veya ReadOnlySpan<char> türündeki bir ifadeler sabit dizeleri eşleştirebilir.

null için kontrol etmek amacıyla aşağıdaki gibi sabit bir desen kullanın:

if (inputVal is null)
{
    return;
}

Burada, desen inputVal null olduğundan emin olarak daha fazla işlemlere devam eder.

Ayrıca, null olmayan değerleri belirlemek için bir olumsuzlanmış null sabit deseni de kullanabilirsiniz:

if (inputVal is not null)
{
    // ...
}

Bu desen, inputVal null olmadığından emin olarak, güvenli bir şekilde ardışık işlemler yapılmasına olanak tanır.

Sabit desenleri C# kodunuza dahil ederek, belirli sabit değerlerin eşleşmesi gerektiği senaryoları etkili bir şekilde ele alabilir, kodun netliğini ve sürdürülebilirliğini artırabilirsiniz.

İlişkisel Desenler

İlişkisel desenler, ifade sonuçlarını sabitlerle karşılaştırmanın bir yolunu sağlar. Aşağıdaki örneğe bakın:

Console.WriteLine(Classify(20));  // output: Too high
Console.WriteLine(Classify(double.NaN));  // output: Unknown
Console.WriteLine(Classify(4));  // output: Acceptable

static string Classify(double measurement) => measurement switch
{
    < -4.0 => "Too low",
    > 10.0 => "Too high",
    double.NaN => "Unknown",
    _ => "Acceptable",
};

Burada, ilişkisel desenler measurement değerini belirli eşiklere karşı karşılaştırarak sınıflandırmasını belirler.

İlişkisel bir desenin sağ tarafında bir tamsayı, kayan nokta, char veya enum türünde sabit bir ifade olmalıdır. Sol tarafta <, >, <=, >= operatörleri kullanılabilir.

Belirli bir aralık içindeki bir ifade sonucunu eşleştirmek için, birleştirici 've' deseni, aşağıda gösterildiği gibi kullanılır:

Console.WriteLine(GetCalendarSeason(new DateTime(2024, 3, 12)));  // output: spring
Console.WriteLine(GetCalendarSeason(new DateTime(2024, 7, 12)));  // output: summer
Console.WriteLine(GetCalendarSeason(new DateTime(2024, 2, 12)));  // output: winter

static string GetCalendarSeason(DateTime date) => date.Month switch
{
    >= 3 and < 6 => "spring",
    >= 6 and < 9 => "summer",
    >= 9 and < 12 => "autumn",
    12 or (>= 1 and <3) => "winter",
    _ => throw new ArgumentOutOfRangeException(nameof(date), $"Date with unexpected month: {date.Month}."),
};

Bu alıntı, takvimin mevsimini ayın belirli aralıklar içinde düşmesine göre belirlemek için birleştirici 've' deseninin nasıl kullanıldığını açıklar. Ayrıca, ilişkisel desenlerin ifade sonuçlarını sabitlerle karşılaştırmanın kısa ve ifade edilebilir bir yolunu sunduğunu ve böylece kodun netliğini ve sürdürülebilirliğini artırdığını belirtir.

Yok Sayma Deseni

Çöp deseni, _ ile ifade edilen herhangi bir ifadeyi eşleştirmek için hizmet eder, null dahil. Aşağıdaki örneği göz önünde bulundurun:

Console.WriteLine(GetDiscountInPercent(DayOfWeek.Friday));  // output: 5.0
Console.WriteLine(GetDiscountInPercent(null));  // output: 0.0
Console.WriteLine(GetDiscountInPercent((DayOfWeek)10));  // output: 0.0

static decimal GetDiscountInPercent(DayOfWeek? dayOfWeek) => dayOfWeek switch
{
    DayOfWeek.Monday => 0.5m,
    DayOfWeek.Tuesday => 12.5m,
    DayOfWeek.Wednesday => 7.5m,
    DayOfWeek.Thursday => 12.5m,
    DayOfWeek.Friday => 5.0m,
    DayOfWeek.Saturday => 2.5m,
    DayOfWeek.Sunday => 2.0m,
    _ => 0.0m,
};

Yukarıdaki yok sayma deseni örneğinde, olası tüm giriş değerlerini ele alır. Haftanın tüm günleri yönetilir ve varsayılan bir değer sağlanır. Bu şekilde, olası tüm değerler ele alınır. Çöp deseni, bir is ifadesinde veya switch deyiminde desen olarak kullanılamaz. Bu tür durumlarda, bir var deseni çöp var _ ile kullanılabilir ve herhangi bir ifadeyi eşleştirir. Ancak, çöp deseni bir switch ifadesinde kullanılabilir. Daha fazla ayrıntı için, özellik teklifi notunun Yok Sayma deseni bölümüne bakınız.

Mantıksal Desenler

C#'daki mantıksal desenler, daha esnek ve ifade edilebilir eşleşme koşulları sağlamak için olumsuzlama, bağlantı ve ayrım gibi güçlü araçlar sunar.

Olumsuzlama (not deseni)

Olumsuzlama deseni not ile temsil edilir ve olumsuzlanan desen, ifadenin eşleşmediğinde eşleşir. Bu, özellikle bir ifadenin null olmadığını kontrol etmek için aşağıda gösterildiği gibi kullanışlıdır:

if (input is not null)
{
    // ...
}

Burada, input null değilse kod bloğu çalıştırılır.

Bağlaçsal (and deseni)

Bağlaçsal desen, and anahtar kelimesi kullanılarak iki desenin ifadeyle eşleşmesi durumunda eşleme yapar. Bu, aşağıdaki örnekte gösterildiği gibi birden fazla koşulu birleştirmeyi sağlar:

Console.WriteLine(Classify(13));    // output: High
Console.WriteLine(Classify(-100));  // output: Too low
Console.WriteLine(Classify(5.7));   // output: Acceptable

static string Classify(double measurement) => measurement switch
{
    < -40.0 => "Too low",
    >= -40.0 and < 0 => "Low",
    >= 0 and < 10.0 => "Acceptable",
    >= 10.0 and < 20.0 => "High",
    >= 20.0 => "Too high",
    double.NaN => "Unknown",
};

Bu örnekte, measurement değeri aralığına göre sınıflandırılır.

Seçimsel (or deseni)

Seçimsel desen, or anahtar kelimesi kullanılarak herhangi bir desenin ifadeyle eşleşmesi durumunda eşleme yapar. Bu, aşağıda gösterildiği gibi birden fazla olası koşulu ele almayı sağlar:

Console.WriteLine(GetCalendarSeason(new DateTime(2021, 1, 19)));  // output: winter
Console.WriteLine(GetCalendarSeason(new DateTime(2021, 10, 9)));  // output: autumn
Console.WriteLine(GetCalendarSeason(new DateTime(2021, 5, 11)));  // output: spring

static string GetCalendarSeason(DateTime date) => date.Month switch
{
    3 or 4 or 5 => "spring",
    6 or 7 or 8 => "summer",
    9 or 10 or 11 => "autumn",
    12 or 1 or 2 => "winter",
    _ => throw new ArgumentOutOfRangeException(nameof(date), $"Date with unexpected month: {date.Month}."),
};

Burada, verilen tarihin ayına göre takvim mevsimi belirlenir.

Bu desen birleştiricileri, kodunuzun esnekliğini ve okunabilirliğini artırarak, daha karmaşık ve hassas eşleşme koşulları oluşturmak için tekrar tekrar kullanılabilir.

Özellik Deseni

Özellik deseni, bir ifadenin özelliklerinin veya alanlarının iç içe geçmiş desenlerle eşleştirilmesini sağlar. Bunun bir örneği, aşağıdaki kod parçacığında görülebilir:

static bool IsConferenceDay(DateTime date) => date is { Year: 2020, Month: 5, Day: 19 or 20 or 21 };

Burada özellik deseni, sağlanan tarihin belirtilen konferans günlerinden birine karşılık geldiğinden emin olur.

Ayrıca, bir özellik deseninde çalışma zamanı türü kontrolü ve değişken tanımı da dahil edilebilir, aşağıda gösterildiği gibi:

static string TakeFive(object input) => input switch
{
    string { Length: >= 5 } s => s.Substring(0, 5),
    string s => s,
    ICollection<char> { Count: >= 5 } symbols => new string(symbols.Take(5).ToArray()),
    ICollection<char> symbols => new string(symbols.ToArray()),
    null => throw new ArgumentNullException(nameof(input)),
    _ => throw new ArgumentException("Unsupported input type."),
};

Burada, özellik deseni dizeler ve karakter koleksiyonlarını ele almak için kullanılır ve özelliklerine göre uygun bir şekilde ele alınmasını sağlar.

Konumsal Desen

C#'da konumsal desen, bir ifade sonucunu ayrıştırmayı ve elde edilen değerleri karşılık gelen iç içe desenlerle eşleştirmeyi sağlar. Örneğin:

public readonly struct Point
{
    public int X { get; }
    public int Y { get; }
    public Point(int x, int y) => (X, Y) = (x, y);
    public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}

static string Classify(Point point) => point switch
{
    (0, 0) => "Origin",
    (1, 0) => "Positive X basis end",
    (0, 1) => "Positive Y basis end",
    _ => "Just a point",
};

Bu örnekte, konumsal desen, koordinatlarına göre noktaları sınıflandırmak için kullanılır.

Ayrıca, C# 10 ile tanıtılan bir genişletilmiş özellik deseni olarak bilinen, bir özellik deseninde iç içe geçmiş özelliklere veya alanlara referans verebilirsiniz:

static bool IsAnyEndOnXAxis(Segment segment) =>
    segment is { Start.Y: 0 } or { End.Y: 0 };

Bu özellik, iç içe geçmiş özelliklere doğrudan erişim sağlayarak, özellik desenlerinin esnekliğini artırır.

Bu desenler, karmaşık veri yapılarını ele almak ve kodunuzun okunabilirliğini ve ifadeliliğini artırmak için güçlü mekanizmalar sunar.

Var Deseni

Var Deseni, herhangi bir türü eşleştirmenizi sağlar. Bu, özellikle boolean ifadeleri içindeki ara sonuçları yakalamak veya switch case koruyucularında birden fazla kontrol gerektiğinde faydalı olabilir.

İşte bir boolean ifadesinde var deseninin kullanımını gösteren bir örnek:

static bool IsAcceptable(int id, int absLimit) =>
    SimulateDataFetch(id) is var results 
    && results.Min() >= -absLimit 
    && results.Max() <= absLimit;

static int [] SimulateDataFetch(int id)
{
    var rand = new Random();
    return Enumerable
               .Range(start: 0, count: 5)
               .Select(s => rand.Next(minValue: -10, maxValue: 11))
               .ToArray();
}

Bu örnekte, SimulateDataFetch bir tamsayılar dizisi döndürür ve is var deseni sonuçları results değişkeninde yakalar, özelliklerine göre daha sonraki hesaplamalara olanak tanır.

Ayrıca, var desenleri daha kısa ve okunabilir kodlar için switch ifadeleri veya deyimleri içinde kullanılabilir. İşte switch case koruyucularında var deseninin kullanıldığı bir örnek:

public record Point(int X, int Y);

static Point Transform(Point point) => point switch
{
    var (x, y) when x < y => new Point(-x, y),
    var (x, y) when x > y => new Point(x, -y),
    var (x, y) => new Point(x, y),
};

static void TestTransform()
{
    Console.WriteLine(Transform(new Point(1, 2)));  // output: Point { X = -1, Y = 2 }
    Console.WriteLine(Transform(new Point(5, 2)));  // output: Point { X = 5, Y = -2 }
}

Bu örnekte, (x, y) var deseni nokta koordinatlarını yakalar, değerlerine göre farklı dönüşümlere olanak tanır.

Bir var deseninde, tanımlanan değişkenin türü, eşleştirilen desene karşı eşleşen ifadenin derleme zamanı türünden çıkarılır.

Var deseni, ifadenin belirli türünün önceden bilinmediği çeşitli senaryoları ele almayı kolaylaştırarak, kodun netliğini ve esnekliğini artırır.

IronPDF Kütüphanesine Giriş

IronPDF Belge İşleme, Iron Software'den gelen ve PDF belge oluşturma konusunda uzmanlaşan bir kütüphanedir. Başlamak için, kütüphaneyi NuGet Paket Yöneticisi'nden veya Visual Studio Paket Yöneticisi'nden yüklemek ilk iştir.

# To install from the NuGet Package Manager Console
Install-Package IronPdf
SHELL

Aşağıdaki resim, Visual Studio Kurulum Klavuzundan nasıl yükleyeceğinizi gösterir.

C# Desen Eşleme İfadeleri (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF'in NuGet paket yöneticisi ile kurulumu

Aşağıdaki kodda, basit bir PDF belgesi oluşturmayı göreceğiz:

using IronPdf;

namespace IronPatterns
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("-----------Iron Software-------------");
            var renderer = new ChromePdfRenderer(); // var pattern
            var content = " <h1> Iron Software is Awesome </h1> Made with IronPDF!";

            // Declaration Pattern
            int? nullableX = 8;
            int y = 45;
            object boxedy = y;
            content += "<p>Declaration Pattern</p>";
            if (nullableX is int a && boxedy is int b)
            {
                Console.WriteLine(a + b); // output: 53
                content += $"<p>Output: {(a + b)}</p>";
            }

            // Relational patterns
            content += "<p>Relational patterns</p>";
            var season1 = GetCalendarSeason(new DateTime(2024, 2, 25));
            Console.WriteLine(season1);
            content += $"<p>2024, 2, 25: {season1}</p>";
            var season2 = GetCalendarSeason(new DateTime(2024, 5, 25));
            Console.WriteLine(season2);
            content += $"<p>2024, 5, 25: {season2}</p>";
            var season3 = GetCalendarSeason(new DateTime(2024, 7, 25));
            Console.WriteLine(season3);
            content += $"<p>2024, 7, 25: {season3}</p>";

            var pdf = renderer.RenderHtmlAsPdf(content);
            pdf.SaveAs("output.pdf"); // Saves our PdfDocument object as a PDF        
        }

        static string GetCalendarSeason(DateTime date) => date.Month switch
        {
            >= 3 and < 6 => "spring",
            >= 6 and < 9 => "summer",
            >= 9 and < 12 => "autumn",
            12 or (>= 1 and < 3) => "winter",
            _ => throw new ArgumentOutOfRangeException(nameof(date), $"Date with unexpected month: {date.Month}."),
        };
    }
}

Çıktı

C# Desen Eşleme İfadeleri (Geliştiriciler İçin Nasıl Çalışır): Şekil 2

Kod Detayları

Burada IronPDF'in ChromePdfRenderer sınıfını HTML dizgisini PDF belgesine kaydetmek için kullanıyoruz. Çıktı 'output.pdf' belgesine kaydedilir.

Deneme Lisansı

IronPDF, deneme lisansı IronPDF Lisanslama Sayfası'ndan alınarak kullanılabilir. Bir lisans anahtarı oluşturmak için bir E-posta ID'si sağlayın ve anahtar e-postanıza teslim edilsin.

"IronPdf.LicenseKey": "<Your Key>"

Yukarıda gösterildiği gibi Lisans anahtarını appsettings.json dosyasına yerleştirin.

Sonuç

C#'daki desen eşleştirme ifadeleri, koşullu ifadeler, tür kontrolleri ve nesne dekompozisyonları yazmanın güçlü ve esnek bir yolunu sunar ve bu da kısa ve okunabilir hale gelir. Desen eşleştirmeden yararlanarak, geliştiriciler boilerplate ve gereksiz tekrarları azaltırken kodun netliğini ve sürdürülebilirliğini artırabilirler. İster tür kontrolü, ister anahtar ifadelerinde, ister dekompozisyon olsun, desen eşleştirme ifadeleri, C#'daki geniş bir programlama görevi yelpazesiyle başa çıkmak için çok yönlü bir araç seti sunar.

Sonuç olarak, desen eşleştirme ifadelerini ustalaşmak, C# programlama becerilerinizi büyük ölçüde geliştirebilir, temiz, daha ifade edilebilir kod yazarak daha kolay anlaşılır ve sürdürülebilir hale getirmenizi sağlar. IronPDF'in HTML'yi PDF'e Dönüştürme yeteneklerini de ele aldık, bu, PDF belgeleri oluşturmak için kullanılabilir.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez