c# – 如何编写与基类一起使用的扩展方法
作者:互联网
想法是扩展我的功能的扩展方法.
所以不要有这样的东西:
return Add(Add(storage.GetFirst(), 3), 7);
我想要这样的东西:
return storage.GetFirst().Add(3).Add(7);
扩展方法的问题是它们必须在静态类中是静态的.
这是我想要做的简化示例.
public class Storage
{
public int GetFirst()
{
return 100;
}
public int GetAll(int x, int y)
{
// ...
return x + y;
}
}
public abstract class MyBase
{
protected Storage storage;
protected MyBase()
{
storage = new Storage();
}
public int Add(int what, int howMuch)
{
return storage.GetAll(what, howMuch);
}
}
public class MyClass : MyBase
{
public int method1()
{
return Add(Add(storage.GetFirst(), 3), 7);
//I want have something like this:
// return storage.GetFirst().Add(3).Add(7);
}
}
课程类别Storage,MyBase和MyClass不能是静态的.逻辑是简化的,有简洁的例子,所以类之间的关系必须保持不变.
我想要做的是使Add方法成为扩展方法,但保留其他所有“更不一样”.
这可能吗?怎么做?
解决方法:
另一种解决方案是让您的Storage类实际存储一些东西:
public class Storage
{
private int currentValue;
public Storage GetFirst()
{
this.currentValue = 100;
return this;
}
public Storage Add(int toAdd)
{
this.currentValue += toAdd;
return this;
}
public int GetResult()
{
return this.currentValue;
}
}
这样你的电话会是:
int result = new Storage().GetFirst().Add(3).Add(5).GetResult();