VB6在C#中的私有静态?

在VB6有一些保留它们的值程序退出后局部静态变量。 这就像使用公共瓦尔但当地块上。 例如:

sub count() static x as integer x = x + 1 end sub

经过10个呼叫,x是10,我试图寻找同样的事情在.NET(甚至JAVA)却没有一个。 为什么? 它是否打破以某种方式面向对象模型,是有办法来模拟的。

--------------解决方案-------------

你可以得到的最接近的是法外的静态字段:

private static int x;
public [static] void Foo() {
x++;
}



例如闭幕的要求:

using System;
class Program {
private static readonly Action incrementCount;
private static readonly Func<int> getCount;
static Program() {
int x = 0;
incrementCount = () => x++;
getCount = () => x;
}
public void Foo() {
incrementCount();
incrementCount();
Console.WriteLine(getCount());
}
static void Main() {
// show it working from an instance
new Program().Foo();
}
}

您可以在类的目的始终使用静态变量:

class C
{
static int x=0;

void count()
{
++x; // this x gets incremented as you want
}
}

我记得静态私人在Visual Basic中。 它们是凉爽某些特定的任务。

没有这样的事在.NET。 你必须坚持与梅托德外面静态的。

通常,这些各种各样的变量是用来维护迭代器。 C#有这些直接内置到通过语言yield关键字。 下面是一个例子:

IEnumerable<int> TimesTable(int table)
{
for (int i=0 ; i<12 ; i++)
{
yield return i * table;
}
}

在这个例子中,我们在n次表,其中由呼叫者指定n创建的值。 我们可以利用这个任意位置迭代器使用,如在foreach循环:

foreach (var value in TimesTable(3))
{
Console.Write(""+ value + " ");
}

...主要生产:

3 6 9 12 15 18 21 24 27 30 33 36

在C ++中,这可能使用的都是静态的变量,比如你从VB中描述的那些(我不是一个VB的家伙,所以我不知道VB语法):

int TimesTable(int table) {
static i = 1;
if (i == 12) {
i = 1;
}
return i++ * table;
}

C#的版本比C ++(或VB),相当于监守迭代器可以及早取消,也可以活跃在任何给定的时间多个迭代器更好。 这些东西是不是真实的C ++版本未经开发商更多的工作。 不利的一面,这意味着,像一个静态变量的唯一的一次是什么在C#中有效的是一个迭代器实施过程中,该值不会持续超过该范围。

我希望是有用处。

分类:C# 时间:2015-03-15 人气:0
本文关键词: .NET,C#,JAVA,VB 6
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 7.043 (s). 10 q(s)