C# 7.0 ने डीकंस्ट्रक्टर्स पेश किए जो किसी ऑब्जेक्ट को उसके घटक भागों में विघटित (deconstruct) करने की अनुमति देते हैं। यह नए टुपल सिंटैक्स का हिस्सा है और फंक्शनल प्रोग्रामिंग से प्रेरित है।
Deconstruct मेथड
एक क्लास या स्ट्रक्ट में Deconstruct मेथड होता है जिसमें out पैरामीटर्स होते हैं:
public class Employee {
public Employee(string employeeName, string firstName, string lastName) {
EmployeeName = employeeName;
FirstName = firstName;
LastName = lastName;
}
public string EmployeeName { get; }
public string FirstName { get; }
public string LastName { get; }
// डीकंस्ट्रक्टर
public void Deconstruct(out string employeeName, out string firstName, out string lastName) {
employeeName = EmployeeName;
firstName = FirstName;
lastName = LastName;
}
}
उपयोग: टुपल डीकंस्ट्रक्शन सिंटैक्स
class Program {
public static void Main() {
Employee employee = new Employee("emp", "fname", "lname");
// डीकंस्ट्रक्शन - ऑब्जेक्ट को व्यक्तिगत वेरिएबल्स में विभाजित
(string EName, string Fname, string Lname) = employee;
// या var के साथ
var (EName, Fname, Lname) = employee;
// या पहले से डिक्लेयर्ड वेरिएबल्स में
string eName, fName, lName;
(eName, fName, lName) = employee;
System.Console.WriteLine(EName); // emp
System.Console.WriteLine(Fname); // fname
System.Console.WriteLine(Lname); // lname
Console.ReadLine();
}
}
आउटपुट
emp
fname
lname
एकाधिक Deconstruct मेथड्स (ओवरलोडिंग)
एक ही क्लास में अलग-अलग पैरामीटर काउंट/टाइप्स के साथ एकाधिक Deconstruct मेथड्स हो सकते हैं:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Address { get; set; }
// 2 पैरामीटर्स
public void Deconstruct(out string firstName, out string lastName) {
firstName = FirstName;
lastName = LastName;
}
// 3 पैरामीटर्स
public void Deconstruct(out string firstName, out string lastName, out int age) {
firstName = FirstName;
lastName = LastName;
age = Age;
}
// 4 पैरामीटर्स
public void Deconstruct(out string firstName, out string lastName, out int age, out string address) {
firstName = FirstName;
lastName = LastName;
age = Age;
address = Address;
}
}
// उपयोग
var (first, last) = person;
var (first, last, age) = person;
var (first, last, age, addr) = person;
बिल्ट-इन टाइप्स के लिए डीकंस्ट्रक्शन
C# 7.0+ में कई बिल्ट-इन टाइप्स डीकंस्ट्रक्शन का समर्थन करते हैं:
// KeyValuePair
var (key, value) = keyValuePair;
// Tuple (नया ValueTuple)
var (x, y, z) = (1, 2, 3);
// Dictionary एंट्री
foreach (var (key, value) in dictionary) { ... }
// ValueTuple रिटर्न करने वाले मेथड्स
public (int Sum, int Count) Calculate(int[] numbers) {
return (numbers.Sum(), numbers.Length);
}
var (sum, count) = Calculate(new[] {1, 2, 3});
डीकंस्ट्रक्टर vs डिस्ट्रक्टर
| डीकंस्ट्रक्टर (Deconstructor) | डिस्ट्रक्टर (Destructor/Finalizer) |
|---|---|
Deconstruct मेथड | ~ClassName() |
| ऑब्जेक्ट को भागों में विभाजित करता है | क्लीनअप लॉजिक चलाता है |
| out पैरामीटर्स का उपयोग | कोई पैरामीटर नहीं |
| टुपल सिंटैक्स के लिए | अनमैनेज्ड रिसोर्स रिलीज़ के लिए |