你如何扩展(或者能否扩展)静态Math方法?

13

使用C# 3.0,我知道您可以使用“this”命名法扩展方法。

我正在尝试扩展Math.Cos(double radians)以包括我的新类。我知道我可以在现有类中创建一个"Cos"方法,但出于练习的目的,我只是想看看如何/是否可以这样做。

尝试了一些新的东西后,我回到了SO以获取输入。我被卡住了。

这是我现在拥有的...

public class EngMath
{
    /// ---------------------------------------------------------------------------
    /// Extend the Math Library to include EngVar objects.
    /// ---------------------------------------------------------------------------

    public static EngVar Abs(this Math m, EngVar A)
    {
        EngVar C = A.Clone();

        C.CoreValue = Math.Abs(C.CoreValue);

        return C;
    }

    public static EngVar Cos(this Math m, EngVar A)
    {
        EngVar C = A.Clone();
        double Conversion = 1;
        // just modify the value. Don't modify the exponents at all

        // is A degrees? If so, convert to radians.
        if (A.isDegrees) Conversion = 180 / Math.PI;

        C.CoreValue = Math.Cos(A.CoreValue * Conversion);

        // if A is degrees, convert BACK to degrees.
        C.CoreValue *= Conversion;

        return C;
    }

    ...
1个回答

15

扩展方法是一种使静态方法看起来像在它们“扩展”的类型上的实例方法的方法。换句话说,您需要某个实例才能使用扩展方法功能。

听起来你正在尝试让Math.Cos处理你的类型,这与你想要实现的相反。在这种情况下,恐怕您必须自己实现该功能。如果这不是你想做的事,请澄清一下。


1
这正是我担心的事情。这并不是任务关键。只是想知道它是否可以完成。感谢你的洞察力。 - Jerry

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