我的扩展方法不起作用

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 ...