我开始爱上扩展方法,但我只是不知道如何为确定的对象类型创建EM.
我有例如:
public static void AddPhoneNumberToContact(this Contact contact, PhoneType type, String number) { lock (contact) { PhoneRow pr = PhoneRow.CreateNew(); pr.SetDefaults(); pr.PtypeIdx = type; pr.PhoneNumber = number; contact.Phones.Add(pr); pr = null; } }
我的问题是我想在Person对象中也有这个方法,这就是我命名的原因
AddPhoneNumberToContact AddPhoneNumberToPerson
有没有办法让AddPhoneNumber和处理提供的对象?
或解决方案是
public static void AddPhoneNumber(this object contact, ... { ... if(typeof(Contact) == contact) ((Contact)contact).Phones.Add(pr); else if(typeof(Person) == contact) ((Person)contact).Phones.Add(pr); }
谢谢.
如何写两个扩展方法:
public static void AddPhoneNumber(this Contact contact, PhoneType type);
和
public static void AddPhoneNumber(this Person person, PhoneType type);
看起来更干净.
如果两者之间存在一些共同的代码,请将其提取到单独的方法中.
制作Contact
并Person
实现通用接口 - 比如说IContactWithPhoneNumbers
- 然后为此接口编写扩展方法.
public interface IContactWithPhoneNumbers {} public class Contact : IContactWithPhoneNumbers {} public class Person : IContactWithPhoneNumbers {} public static void AddPhoneNumber(this IContactWithPhoneNumbers obj) {}