bal*_*dre 9 c# extension-methods
我开始爱上扩展方法,但我只是不知道如何为确定的对象类型创建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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我想在Person对象中也有这个方法,这就是我命名的原因
AddPhoneNumberToContact
AddPhoneNumberToPerson
Run Code Online (Sandbox Code Playgroud)
有没有办法让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);
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Fre*_*ool 12
如何写两个扩展方法:
public static void AddPhoneNumber(this Contact contact, PhoneType type);
Run Code Online (Sandbox Code Playgroud)
和
public static void AddPhoneNumber(this Person person, PhoneType type);
Run Code Online (Sandbox Code Playgroud)
看起来更干净.
如果两者之间存在一些共同的代码,请将其提取到单独的方法中.
制作Contact
并Person
实现通用接口 - 比如说IContactWithPhoneNumbers
- 然后为此接口编写扩展方法.
public interface IContactWithPhoneNumbers {}
public class Contact : IContactWithPhoneNumbers {}
public class Person : IContactWithPhoneNumbers {}
public static void AddPhoneNumber(this IContactWithPhoneNumbers obj) {}
Run Code Online (Sandbox Code Playgroud)