我正在构建一个单位转换库,并且我遇到了一个扩展方法的奇怪问题:
我正在尝试向此接口添加扩展方法:
namespace ClassLibrary1
{
public interface DistanceType
{
double ConversionFactorToStandardUnit { get; }
}
}
在另一个课程中,我有这个扩展方法:
namespace ClassLibrary1.DistanceTypes.Imperial.Inch
{
public static class DistanceTypeExtension
{
public static Inch Inch(this DistanceType passedDistance)
{
return new Inch();
}
}
}
但是当我尝试使用它时:
using ClassLibrary1.DistanceTypes.Imperial;
using ClassLibrary1.DistanceTypes.Imperial.Inch;
namespace ClassLibrary1
{
[TestClass]
public class ImperialTests
{
[TestMethod]
public void ExtensionTest()
{
Distance d = new Distance(5, DistanceType.Inch());
Assert.AreEqual(5, d.ToDoubleAsInches());
}
}
}
我收到一条错误,指出DistanceType不符合英寸的定义
答案 0 :(得分:2)
扩展方法是通过Type的实例调用的,我看到你直接在Type
上调用它:
DistanceType distanceType = new DistanceType();
Distance d = new Distance(5, distanceType.Inch());
您还需要创建一个实现DistanceType
答案 1 :(得分:1)
首先,您需要实现该界面的东西。
public class ImplementsDistanceType : DistanceType ...
然后你可以创建一个实例并在其上调用扩展方法。
var d = new ImplementsDistanceType();
var i = d.Inch();
此外,您可能希望对名称之前放置I
的接口使用标准命名约定。
public interface IDistanceType ...