12

在 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;
    }

    ...
4

1 回答 1

14

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

在我看来,您试图通过让 Math.Cos 处理您的类型来以相反的方式进行处理。在那种情况下,恐怕您必须自己实现该功能。如果这不是你想要做的,请澄清。

于 2009-01-27T18:18:08.360 回答