C# 包装基本类型

3

我知道无法从原始类型派生出一个类,但是我希望我的类在不进行强制转换的情况下“看起来”像一个原始类型。在这种情况下,我的类将会像一个十进制数一样操作:

    public interface IFoo
    {
        static explicit operator Decimal(IFoo tFoo);
    }

    public class Foo: IFoo
    {
        private Decimal m_iFooVal;

        public Decimal Value
        {
            get { return m_iFooVal; }
            set { m_iFooVal= value; }
        }

        static explicit operator Decimal(IFoo tFoo)
        {
            return (tFoo as Foo).Value;
        }

    }

以上代码无法正常工作,因为显式运算符不能在接口中定义。我的代码涉及到接口,我希望保持这样的设计。有没有可能将IFoo转换为Decimal?欢迎提供任何替代方案。示例:

IFoo tMyFooInterfaceReference = GetFooSomehow();    
Decimal iVal = tMyFooInterfaceReference;
1个回答

7
为什么不向您的IFoo接口添加另一种方法,名为ToDecimal(),并在需要时调用它呢?
public interface IFoo
{
    decimal ToDecimal();
}

public class Foo : IFoo
{
    public decimal Value { get; set; }

    public decimal ToDecimal() { return Value; }
}

您的代码不会变得太复杂:

IFoo tMyFooInterfaceReference = GetFooSomehow();
decimal iVal = tMyFooInterfaceReference.ToDecimal();

这是正确的方法。接口定义了一个契约,类实现了这个契约,而且整个世界都知道这个契约是什么,不像假设的转换。 - Anthony Pegram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接