我有界面:
public interface IBag
{
public string BagName { get; }
}
和类继承自:
public class CacheBag : IBag
{
private Dictionary<string, object> cache;
public Dictionary<string, object> Cache
{
get
{
return this.cache;
}
private set
{
this.cache = value;
}
}
public string BagName
{
get { return "CacheBag"; }
}
}
我尝试从接口:
创建类继承的扩展方法 public static object Retrieve(this IBag bag)
{
Type objType = bag.GetType();
IBag obj = null;
try
{
IsolatedStorageFile appStore = IsolatedStorageFile.GetUserStoreForApplication();
string fileName = string.Format(CultureInfo.InvariantCulture, "{0}.xml", bag.BagName);
if (appStore.FileExists(fileName))
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Open, appStore))
{
using (StreamReader sr = new StreamReader(isoStream))
{
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(objType);
obj = (IBag)x.Deserialize(sr);
}
}
}
}
catch (Exception ex)
{
log.Error(ex.Message);
}
return obj;
}
}
但现在它起作用了:
UserBag users = new UserBag();
users.Retrieve();
我可以像这样调用扩展名:
CacheBag.Retrieve();
我应该如何更改我的实现以实现这一目标?
答案 0 :(得分:2)
您应该能够在类的实例上调用扩展方法:
CacheBag bag = new CacheBag();
object result = bag.Retrieve();
您需要该类的实例才能调用扩展方法。作为捷径,你可以写:
object result = new CacheBag().Retrieve();
但是如果您不想创建实例,那么您不需要扩展方法。您必须定义一个普通的静态方法。