Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#添加到另一个DLL中的类_C#_Class_Extending Classes - Fatal编程技术网

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

C#添加到另一个DLL中的类,c#,class,extending-classes,C#,Class,Extending Classes,…可能吗 例如,我可以添加这个简单的函数 public static double Deg2Rad(double degrees) { return Math.PI / 180 * degrees; } …转换到类? 所以(使用默认的…“usings”)您可以调用 double radians = Convert.Deg2Rad(123); 这能做到吗?如果是,怎么做?不,这是不可能的。如果Convert不是静态的,但不是静态的,则可以使用扩展名 您可以使用this关键字向doubl

…可能吗

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

public static double Deg2Rad(double degrees) {
    return Math.PI / 180 * degrees;
}
…转换到
类?
所以(使用默认的…“usings”)您可以调用

double radians = Convert.Deg2Rad(123);

这能做到吗?如果是,怎么做?

不,这是不可能的。如果
Convert
不是静态的,但不是静态的,则可以使用扩展名

您可以使用
this
关键字向
double
添加扩展名:

public static double Deg2Rad(this double degrees) {
    return Math.PI / 180 * degrees;
}
并像这样使用它:

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

但是,您必须将方法放入一个
静态
类中,它才能工作。

不,这是不可能的。如果
Convert
不是静态的,但不是静态的,则可以使用扩展名

您可以使用
this
关键字向
double
添加扩展名:

public static double Deg2Rad(this double degrees) {
    return Math.PI / 180 * degrees;
}
并像这样使用它:

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

不过,您必须将您的方法放入
静态类中才能使其工作。

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


有关更多信息,请参阅。

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


有关详细信息,请参见。

不,您不能,但您可以向
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;
    }
}

不,您不能,但是您可以向
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;
    }
}

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

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

double radians = MyConvert.Deg2Rad(123);
(显然,
MyConvert
是一个垃圾名称,但你明白了)


上面提到的方法与在系统
Convert
类上使用该方法的唯一区别在于,如果它在
Convert
类上,它看起来像一个内置函数,但您很难说服我这实际上是一件好事(我想知道什么时候调用框架代码而不是内部维护的代码).

不,您不能,但实际上不需要-您可以只声明自己的静态类,例如:

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

double radians = MyConvert.Deg2Rad(123);
(显然,
MyConvert
是一个垃圾名称,但你明白了)


上面提到的方法与在系统
Convert
类上使用该方法的唯一区别在于,如果它在
Convert
类上,它看起来像一个内置函数,但您很难说服我这实际上是一件好事(我想知道什么时候调用框架代码而不是内部维护的代码).

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

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


但是,同样,类必须最初声明为partial才能工作。

除了这里所说的之外,还有另一个选项是(这不适用于Convert)

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


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

接受,还有没有办法使其也适用于int而不必用int重写它?您可以将其转换为double:
x=((double)i).Pi()
,但它很难看。只需继续为您想要的类型编写扩展。您可以将扩展放在不同的名称空间中,因此根据您使用的
语句,可以使用不同的扩展。接受,还有没有一种方法可以使它也适用于int,而不必用int重写它?您可以将它转换为double:
x=((double)i).Pi()
,但它很难看。只需继续为您想要的类型编写扩展。您可以将扩展放在不同的名称空间中,因此根据您使用的
语句,可以使用不同的扩展。我知道这是旧的,但为了确保其他人不会被误导,我正在投票并发布一个链接,显示不能跨程序集使用分部类:我知道这是旧的,但为了确保其他人不会被这一点误导,我投了反对票,并发布了一个链接,表明不能跨多个程序集使用分部类: