c# - 我的扩展方法不起作用

标签 c# interface extension-methods

我正在构建一个单位换算库,但在使用扩展方法时遇到了一个奇怪的问题:

我正在尝试向该接口(interface)添加扩展方法:

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 没有包含 Inch 的定义

最佳答案

扩展方法是通过 Type 的实例调用的,我看到你直接在 Type 上调用它:

DistanceType distanceType = new DistanceType();
Distance d = new Distance(5, distanceType.Inch());

并且您还需要创建一个实现 DistanceType

的类

关于c# - 我的扩展方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678031/

相关文章:

实现特定接口(interface)的 "Type"的C#列表

c# - 泛型和接口(interface)问题

c++ - 一种在 C++ 中强制使用接口(interface)的方法

c# - 为什么扩展方法中的 `char` 参数被解释为 `int` ?

c# - 如何选择父级和筛选的子级列表(如果存在)(外连接)

c# - 如何使 autofac KeyFilter 在 asp.net-core web api 中工作?

c# - C/C#-编码(marshal).PtrToStringAnsi

c# - 如何将表单值传递给 .NET MVC 中的 Controller

c# - 从 Timer 内的 ListBox 中删除

ios - 如何使用字符串扩展