C#在另一个DLL中添加到类中

时间:2011-04-28 23:05:33

标签: c# class extending-classes

......有可能吗?

例如,我可以添加这个简单的函数......

public static double Deg2Rad(double degrees) {
    return Math.PI / 180 * degrees;
}

...到Convert班级? 所以(使用默认的......“使用”)你可以调用

double radians = Convert.Deg2Rad(123);

可以这样做吗?如果是这样,怎么样?

5 个答案:

答案 0 :(得分:1)

不,这是不可能的。如果Convert不是static,而是没有。

,则可以使用扩展程序

您可以使用double关键字<{1}}向this添加扩展程序:

public static double Deg2Rad(this double degrees) {
    return Math.PI / 180 * degrees;
}

并像这样使用它:

double radians = (123D).Deg2Rad();

但是,您必须将方法放在static类中才能使其正常工作。

答案 1 :(得分:1)

你可以得到你想要的东西。 C#有“扩展方法”。这允许您将方法添加到另一个类,即使该类位于您没有源代码的另一个程序集中。但是,您无法将静态函数添加到另一个类。您只能添加实例方法。

有关详细信息,请参阅MSDN Extensions Methods

答案 2 :(得分:1)

不,你不能,但你可以向double添加一个扩展方法,并将其称为

double x = 180.0;
double y = Math.Cos( x.Deg2Rad() );
double z = Math.Sin( 0.5.Pi() );

在静态类中添加以下扩展方法:

public static class ExtensionMethods
{
    public static double Deg2Rad(this double angle)
    {
        return Math.PI*angle/180.0;
    }

    public static double Pi(this double x)
    {
        return Math.PI*x;
    }
}

答案 3 :(得分:1)

不,你不能,但你真的不需要 - 你只能声明自己的静态类,例如:

public static class MyConvert
{
    public static double Deg2Rad(double degrees) 
    {
        return Math.PI / 180 * degrees;
    }
}

用法:

double radians = MyConvert.Deg2Rad(123);

(显然MyConvert是一个垃圾名称,但你明白了。)

上面和系统Convert类上的方法之间的唯一区别是,如果它在Convert类上它看起来像一个内置函数,但你会挣扎到说服我这实际上是一件好事(我想知道我什么时候调用框架代码而不是内部维护的代码)。

答案 4 :(得分:-1)

除了这里所说的,还有另一个选项Partial classes(这不适用于转换)。

如果该类声明为partial,则可以通过另一个partial类添加menthods,即使它位于另一个程序集(DLL)中。

但是,同样,该类必须最初被声明为部分才能工作。