मुझे यहां थोड़ा पैटर्न दिशा चाहिए। सी # के लिए नया।दो तृतीय पक्ष वर्गों के लिए सामान्य इंटरफ़ेस मैं नियंत्रण नहीं करता हूं। बाहरी बहुरूपता?
मैं एक तीसरी पार्टी देव किट के साथ काम कर रहा हूं जो एक वेब सेवा लपेटता है। ऐसे दो विशिष्ट वर्ग हैं जिनसे मैं अपेक्षा करता हूं, अपेक्षाकृत समान, देवकिट में दो अलग-अलग नामस्थानों में हैं और कोई सामान्य बेस क्लास नहीं है। हालांकि मैं दोनों के लिए एक आम इंटरफ़ेस के खिलाफ प्रोग्राम करना चाहता हूं। मैंने खतरनाक रूप से एक कार्यान्वयन को फेंक दिया जो अनिवार्य रूप से रैपर को लपेटता है लेकिन मुझे लगता है कि निरंतर प्रकार के कास्टिंग के कारण यह सबसे प्रभावी तरीका नहीं है।
मैं एडाप्टर, इंटरफेस, विस्तार विधियों आदि पर आलेखों के माध्यम से खुदाई कर रहा हूं .. लेकिन मैं समय पर कम चल रहा हूं इसलिए यदि मैं एक दिशा में धक्का पा सकता हूं जिसकी बहुत सराहना की जाएगी।
using ThirdParty.TypeA.Employee;
using ThirdParty.TypeB.Employee;
public class Employee
{
private object genericEmployee;
private EmployeeType empType;
public enum EmployeeType
{
TypeA = 0;
TypeB = 1;
}
public Employee(Object employee, EmployeeType type)
{
genericEmployee = employee;
empType = type;
}
public String Name
{
if (empType == EmployeeType.TypeA)
return (ThirdParty.TypeA.Employee)genericEmployee.Name;
else
return (ThirdParty.TypeB.Employee)genericEmployee.Name;
}
public String Age
{
if (empType == EmployeeType.TypeA)
return (ThirdParty.TypeA.Employee)genericEmployee.Age;
else
return (ThirdParty.TypeB.Employee)genericEmployee.Age;
}
}
रेव 2:
class EmployeeTypeAAdapter : TypeA, IEmployeeAdapter
{
TypeA _employee;
public EmployeeTypeAAdapter(TypeA employee)
{
_employee = employee
}
public String Name
{
get { return _employee.Name; }
set { _employee.Name = value; }
}
public String Balance
{
get
{
if (_employee.Balance != null)
{
decimal c = _employee.Balance.Amount;
return String.Format("{0:C}", c);
}
else
{
return "";
}
}
}
//...
}
class EmployeeTypeBAdapter : TypeB, IEmployeeAdapter
{
TypeB _employee;
public EmployeeTypeAAdapter(TypeB employee)
{
_employee = employee
}
public String Name
{
get { return _employee.Name; }
set { _employee.Name = value; }
}
public String Balance
{
get
{
if (_employee.Balance != null)
{
decimal c = _employee.Balance.Amount;
return String.Format("{0:C}", c);
}
else
{
return "";
}
}
}
//....
}
टाइप ए और टाइपबी सार्वजनिक और जाने-माने हैं, मेरा मतलब है कि आपको वास्तव में enum पेश करने की आवश्यकता है? आप एक सामान्य तरीका जा सकते हैं। – abatishchev
टाइपए और टाइपब के प्रकार क्या हैं, कक्षाएं कैसे घोषित की जाती हैं? गुणों के बराबर सेट और कोई बेस क्लास? तो आप उन्हें केवल 'ऑब्जेक्ट' द्वारा सामान्यीकृत कर सकते हैं? – abatishchev
तीसरे पक्ष पुस्तकालय में कोई आधार वर्ग नहीं है। Enum केवल एक सुविधाजनक संपत्ति थी जिसे मैंने टाइपऑफ या आईएस का उपयोग करने के लिए ऑब्जेक्ट (टाइप ए या टाइपबी) के प्रकार को निर्धारित करने के लिए हर बार जब मैंने किसी संपत्ति का उपयोग किया था, का उपयोग करने से बचने के लिए बनाया था। – RyanMac