Burada küçük bir desen yönüne ihtiyacım var. Yeni C#.İki üçüncü taraf sınıfı için ortak arabirim denetlemiyorum. Dış Polimorfizm?
ben bir web hizmeti sarar bir üçüncü şahıs dev kiti ile çalışıyorum. Göreceli olarak benzer olsa da, devkitte iki farklı isim alanında yer alan ve ortak bir temel sınıf bulunmayan iki özel sınıf vardır. Her ikisi için de ortak bir arayüze karşı program yapmak isterim. Ayrıcalıklı bir şekilde sargıyı saran bir uygulamayı bir araya getirdim ama inişli tipteki dökümden dolayı en etkili yöntem olmadığını düşünüyorum.
ben vb adaptörleri, arabirimler, uzatma yöntemleri makalelere kazıyoruz .. ama büyük takdir ediyorum tek yönde bir itme alabilir bu yüzden zamanında düşük koşuyorum.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;
}
}
Rev 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 "";
}
}
}
//....
}
Are Genel bir yoldan gidebilirsin. – abatishchev
TypeA ve TypeB türleri nedir, sınıflar nasıl ilan edilir? Sadece eşit özellikler ve temel sınıf yok mu? Yani onları sadece 'object' ile genelleştirebilirsiniz? – abatishchev
Üçüncü parti kitaplığında taban sınıfı yok. Enum, bir mülke her eriştiğimde nesne türünü (TypeA veya TypeB) belirlemek için TypeOf veya IS kullanmak zorunda kalmamak için yarattığım bir kolaylık özelliği idi. – RyanMac