我的扩展方法不起作用
My Extension Method Does Not Work
我正在构建一个单位转换库,但我遇到了一个关于扩展方法的奇怪问题:
我正在尝试向该接口添加扩展方法:
namespace ClassLibrary1
{
public interface DistanceType
{
double ConversionFactorToStandardUnit { get; }
}
}
在另一个class中,我有这个扩展方法:
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 没有包含 Inch 的定义
Extension Method 是通过 Type 的实例调用的,我看到你在 Type
上直接调用它:
DistanceType distanceType = new DistanceType();
Distance d = new Distance(5, distanceType.Inch());
并且您还需要创建一个 class 来实现 DistanceType
首先,您需要实现该接口的东西。
public class ImplementsDistanceType : DistanceType ...
然后您可以创建它的一个实例并在其上调用扩展方法。
var d = new ImplementsDistanceType();
var i = d.Inch();
此外,您可能希望对接口使用标准命名约定,将 I
放在名称前。
public interface IDistanceType ...
我正在构建一个单位转换库,但我遇到了一个关于扩展方法的奇怪问题:
我正在尝试向该接口添加扩展方法:
namespace ClassLibrary1
{
public interface DistanceType
{
double ConversionFactorToStandardUnit { get; }
}
}
在另一个class中,我有这个扩展方法:
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 没有包含 Inch 的定义
Extension Method 是通过 Type 的实例调用的,我看到你在 Type
上直接调用它:
DistanceType distanceType = new DistanceType();
Distance d = new Distance(5, distanceType.Inch());
并且您还需要创建一个 class 来实现 DistanceType
首先,您需要实现该接口的东西。
public class ImplementsDistanceType : DistanceType ...
然后您可以创建它的一个实例并在其上调用扩展方法。
var d = new ImplementsDistanceType();
var i = d.Inch();
此外,您可能希望对接口使用标准命名约定,将 I
放在名称前。
public interface IDistanceType ...