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()
,但它很难看。只需继续为您想要的类型编写扩展。您可以将扩展放在不同的名称空间中,因此根据您使用的语句,可以使用不同的扩展。我知道这是旧的,但为了确保其他人不会被误导,我正在投票并发布一个链接,显示不能跨程序集使用分部类:我知道这是旧的,但为了确保其他人不会被这一点误导,我投了反对票,并发布了一个链接,表明不能跨多个程序集使用分部类: