我的扩展方法不起作用

时间:2015-04-16 14:37:35

标签: c# interface extension-methods

我正在构建一个单位转换库,并且我遇到了一个扩展方法的奇怪问题:

我正在尝试向此接口添加扩展方法:

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不符合英寸的定义

2 个答案:

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