Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# functions with static data

Tags:

c#

.net

vb.net

In VB.Net, I can declare a variable in a function as Static, like this:

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

Note that I need to use the keyword Static, rather than Shared, which is the normal way to express this in VB.Net. How can I do this in C#? I can't find its equivalent.

like image 349
Joel Coehoorn Avatar asked Oct 01 '08 13:10

Joel Coehoorn


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is C full form?

Full form of C is “COMPILE”. One thing which was missing in C language was further added to C++ that is 'the concept of CLASSES'.

What is C language basics?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.


2 Answers

Ha! In posting the question, I found the answer! Rather than googling for C# I should have been looking for details on how VB.Net implements it, and typing up the question made that apparent to me. After applying that insight, I found this:
http://weblogs.asp.net/psteele/articles/7717.aspx

That article explains that it's not really supported by the CLR, and the VB compiler creates a static (shared) variable "under the hood" in the method's class. To do the same in C#, I have to create the variable myself.

More than that, it uses the Monitor class to make sure the static member is thread-safe as well. Nice.

As a side note: I'd expect to see this in C# sometime soon. The general tactic I've observed from MS is that it doesn't like VB.Net and C# to get too far apart feature-wise. If one language has a feature not supported by the other it tends to become a priority for the language team for the next version.

like image 57
Joel Coehoorn Avatar answered Sep 23 '22 02:09

Joel Coehoorn


Personally I'm glad that C# doesn't have this. Logically, methods don't have state: types and instances do. C# makes that logical model clearer, IMO.

like image 32
Jon Skeet Avatar answered Sep 25 '22 02:09

Jon Skeet