Csharp/C#教程:c#类引用而不是实例引用分享


c#类引用而不是实例引用

我可以在本地引用C#中的类,而不是类的实例吗? 以下代码不会编译,但作为示例,例如:

void someFunc() { var a = System.Math; var b = a.Abs(4); } 

编辑:在真正的程序中,它不是System.Math类,我想构造类并返回构造的值。 我最初并不认为我想要使用该类的上下文是相关的,而且可能不应该。

Anastasiosyal有一个有趣的想法,使用当地的代表来做。

您不能为变量分配静态类的值。 问题是你为什么要这样做,你可能还有其他方法可以解决你的问题

例如,您可以使用委托来分配您要执行的操作:

 Func operation = Math.Abs; // then you could use it like so: int processedValue = operation(-1); 

你可以引用一个类:

 Type math = typeof(System.Math); 

但是你不能使用常规点语法在其上调用静态方法:

 // Wont compile: math.Abs(5); 

如果您只想缩短(和IMHO混淆)您的代码,您可以通过using指令引用带别名的类 :

 // Untested, but should work namespace MyUnreadableCode { using m = System.Math; class Foo { public static Int32 Absolut(Int32 a) { return m.Abs(a); } } } 

在c#中,它们被称为类型。 你可以分配它们像:

 Type a = typeof(SomeClass); 

但是,您必须实例化它才能使用它。 我相信你想要的是像java一样的静态导入,但不幸的是,它们在c#中不存在。

简短的回答:不像你上面的那样。

在C#6.0中,他们引入了静态导入function ,可以解决问题。

 using static System.Math; class MyProgram { static void Main(string[] args) { var b = Abs(4); // No need to specify the name of Math class } } 

据我所知,你需要引用短名称的class级? 试试这个(在文件的顶部,在using语句部分):

 using m = System.Math; 

稍后在你的代码中:

 m.Abs(...) 

说得通?

不可以。将Type视为实例方法绑定到原始类型上的静态方法的值是不可能的。 为此,您需要构造一个新类型,将其方法调用转发给原始类型。

上述就是C#学习教程:c#类引用而不是实例引用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 class MyMath { public int Abs(int i) { return Math.Abs(i); } } var x = new MyMath(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/992706.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐