繁体   English   中英

C#函数包含静态数据

[英]C# functions with static data

在VB.Net中,我可以将函数中的变量声明为Static,如下所示:

Function EncodeForXml(ByVal data As String) As String
    Static badAmpersand As Regex = new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)")

    data = badAmpersand.Replace(data, "&")

    ''// more processing

    return data
End Function

请注意,我需要使用关键字Static而不是Shared ,这是在VB.Net中表达这一点的常用方法。 我怎么能在C#中做到这一点? 我找不到它的等价物。

哈! 在发布问题时,我找到了答案! 而不是谷歌搜索C#我应该一直在寻找有关VB.Net如何实现它的详细信息,并输入对我来说明显的问题。 应用这种洞察力后,我发现了这个:
http://weblogs.asp.net/psteele/articles/7717.aspx

那篇文章解释说CLR并不真正支持它,VB编译器在方法的类中创建了一个静态(共享)变量。 要在C#中做同样的事情,我必须自己创建变量。

更重要的是,它使用Monitor类来确保静态成员也是线程安全的。 尼斯。

作为旁注:我希望很快就会在C#中看到这个。 我从MS观察到的一般策略是它不喜欢VB.Net和C#在特征方面相距太远。 如果一种语言具有另一种语言不支持的功能,则它往往成为下一版本语言团队的优先级。

就个人而言,我很高兴C# 没有这个。 逻辑上,方法没有状态:类型和实例。 C#使逻辑模型更加清晰,IMO。

不幸的是,C#中没有相应的内容。

您将需要使用类级变量。

这是VB希望C#拥有的少数几件事之一。

你必须在类级别声明:

private static readonly RegEx badAmpersand = new RegEx("...");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM