Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# C语言中的静态变量#_C#_Variables_Static Variables - Fatal编程技术网

C# C语言中的静态变量#

C# C语言中的静态变量#,c#,variables,static-variables,C#,Variables,Static Variables,在C#中,有没有一种方法可以将静态变量放入VB.Net之类的方法中 Static myCollection As Collection 与VB.NET最接近的是在当前类型中创建一个字段。除了C#没有等价物之外。不,CLR不支持这一点,VB.NET使用编译器技巧来允许它。啊 为什么C不支持静态方法 变量 Q:在C++中,可以写一个 静态方法变量,并具有 只能访问的变量 从方法内部。C#没有 提供此功能。为什么? 答:C#没有这样做有两个原因 有这个功能 首先,有可能获得接近 具有相同的效果 类

在C#中,有没有一种方法可以将静态变量放入VB.Net之类的方法中

Static myCollection As Collection

与VB.NET最接近的是在当前类型中创建一个字段。除了C#没有等价物之外。

不,CLR不支持这一点,VB.NET使用编译器技巧来允许它。啊

为什么C不支持静态方法 变量

Q:在C++中,可以写一个 静态方法变量,并具有 只能访问的变量 从方法内部。C#没有 提供此功能。为什么?

答:C#没有这样做有两个原因 有这个功能

首先,有可能获得接近 具有相同的效果 类级别的静态和添加方法 静力学将需要增加 复杂性

第二,方法级静态是 有点臭名昭著 调用代码时出现的问题 重复或从多个线程, 既然定义在 方法,很难找到 定义

--


没有,但是这与在类级别使用静态变量有什么不同

至于共享是如何实现的,这是一个编译器技巧,它在类上创建了一个静态字段。

我很确定C#等价物是
const
:因此:

public const Collection myCollection = new Collection(); public const Collection myCollection=new Collection();
我对VB.NET不太熟悉,所以我可能不太熟悉,但这将允许您设置一个无法更改的变量。

是的,这与在类级别设置一个变量完全相同。它只允许在方法级别声明,因为遗留VB的static关键字意味着在函数/子返回后本地值将保持不变。这是不同的,因为VB的“编译器技巧”还使用monitor类来确保它的线程安全,并且因为它的作用域是方法,所以其他地方的访问将失败(更好的语义)。它的唯一作用域是,因为方法名称用于命名变量。我想如果你想在C中实现线程安全,你也应该实现一个监视器。我更愿意看到C#实现一个静态线程安全,它像在VB中那样包装对变量的访问,但不必担心对方法的作用域。在VB6中,静态方法变量是共享的,还是作用域是实际类?在VB中,“静态”变量的作用域与方法类似。因此,如果方法是共享的(C#static),那么变量也是共享的。如果它位于实例方法内部,则它属于特定对象。>“当代码被重复调用或从多个线程调用时会导致问题,这是臭名昭著的”--有趣的是,因为VB.Net实现被认为是线程安全的。这是如何作为最佳答案进行检查的。答案是否定的。有人说,但仍然是否定的。这里提供的答案引用了埃里克·冈纳森的话,这是Mircosoft的逃避。这样简单是有用的。顺便说一下,java至少在1.2和C++中已经具备了这个能力,只要我能记住。你会认为一种混合C++、java和VB的语言将支持所有三个共同的事物。如果有三种语言支持这一点,那么肯定有一个很好的理由,并且用这两个理由放弃它是站不住脚的,而且它们显然隐藏了一些东西。不管有什么借口,这仍然是Microsoft给出的标准答案。只需使用私有静态变量创建一个1方法静态类。如果你真的想让你的静态方法和其他东西在一个类中,那么让你的静态方法调用这个新方法。静态变量是类的每个实例共享同一个变量实例的变量。变量是可变的,对一个类中的值的更改将更改该类的所有其他实例中的值。轻微更正。C#中的静态变量是共享的。在VB中,静态变量只有在包含函数被共享的情况下才会被共享。如果你不喜欢编译器的技巧,你会在C#中使用“yield”关键字吗?这是一个怎样的编译器技巧?它只是一个成员变量,恰好可见性降低。我也从不使用yield。但是我想要静态变量方法