C#
  Home arrow C# arrow C# - Static Members
Dev Articles Forums 
ADO.NET  
Apache  
ASP  
ASP.NET  
C#  
C++  
ColdFusion  
COM/COM+  
Delphi-Kylix  
Design Usability  
Development Cycles  
DHTML  
Embedded Tools  
Flash  
Graphic Design  
HTML  
IIS  
Interviews  
Java  
JavaScript  
MySQL  
Oracle  
Photoshop  
PHP  
Reviews  
Ruby-on-Rails  
SQL  
SQL Server  
Style Sheets  
VB.Net  
Visual Basic  
Web Authoring  
Web Services  
Web Standards  
XML  
Dedicated Servers  
Moblin 
JMSL Numerical Library 
IBM® developerWorks 
Sun Developer Network 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
C#

C# - Static Members
By: Rajesh V S
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 4 stars4 stars4 stars4 stars4 stars / 19
    2003-04-08

    Table of Contents:

    Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    This article will help you understand the concepts relating to static members in C#. Once you have read this article you'll be able you utilise the static member properties.

    A C# class can contain both static and non-static members. When we declare a member with the help of the keyword static, it becomes a static member. A static member belongs to the class rather than to the objects of the class. Hence static members are also known as class members and non-static members are known as instance members.

    In C#, data fields, member functions, properties and events can be declared either as static or non-static. Remember that indexers in C# can't declared as static.

    Static Fields

    Static fields can be declared as follows by using the keyword static.

     class MyClass
    {
    public static int x;
    public static int y = 20;
    }
    When we declare a static field inside a class, it can be initialized with a value as shown above. All un-initialized static fields automatically get initialized to their default values when the class is loaded first time.

    For example

    // C#:static & non-static
    // Author: rajeshvs@msn.com
    using System;
    class MyClass
    {
    public static int x = 20;
    public static int y;
    public static int z = 25;
    public MyClass(int i)
    {
    x = i;
    y = i;
    z = i;
    }
    }
    class MyClient
    {
    public static void Main()
    {
    Console.WriteLine("{0},{1},{2}",MyClass.x,MyClass.y,MyClass.z);
    MyClass mc = new MyClass(25);
    Console.WriteLine("{0},{1},{2}",MyClass.x,MyClass.y,MyClass.z);
    }
    }
    The C# provides a special type of constructor known as static constructor to initialize the static data members when the class is loaded at first. Remember that, just like any other static member functions, static constructors can't access non-static data members directly.

    The name of a static constructor must be the name of the class and even they don't have any return type. The keyword static is used to differentiate the static constructor from the normal constructors. The static constructor can't take any arguments. That means there is only one form of static constructor, without any arguments. In other way it is not possible to overload a static constructor.

    We can't use any access modifiers along with a static constructor.

    // C# static constructor
    // Author: rajeshvs@msn.com
    using System;
    class MyClass
    {
    public static int x;
    public static int y;
    static MyClass ()
    {
    x = 100;
    Y = 200;
    }
    }
    class MyClient
    {
    public static void Main()
    {
    Console.WriteLine("{0},{1},{2}",MyClass.x,MyClass.y);
    }
    }
    

    Note that static constructor is called when the class is loaded at the first time. However we can't predict the exact time and order of static constructor execution. They are called before an instance of the class is created, before a static member is called and before the static constructor of the derived class is called.

    Static Member Functions

    Inside a C# class, member functions can also be declared as static. But a static member function can access only other static members. They can access non-static members only through an instance of the class.

    We can invoke a static member only through the name of the class. In C#, static members can't invoked through an object of the class as like in C++ or JAVA.

    // C#:static & non-static
    // Author: rajeshvs@msn.com
    using System;
    class MyClass
    {
    private static int x = 20;
    private static int y = 40;
    public static void Method()
    {
    Console.WriteLine("{0},{1}",x,y); 
    }
    }
    class MyClient
    {
    public static void Main()
    {
    MyClass.Method();
    }
    }
    

    Static Properties

    The properties also in C# can be declared as static. The static properties are accessing using the class name. A concrete example is shown below.

    // C#:static & non-static
    // Author: rajeshvs@msn.com
    using System;
    class MyClass
    {
    public static int X
    {
    get
    {
    Console.Write("GET");
    return 10;
    }
    set
    {
    Console.Write("SET");
    }
    }
    }
    class MyClient
    {
    public static void Main()
    {
    MyClass.X = 20; // calls setter displays SET
    int val = MyClass.X;// calls getter displays GET
    }
    }

    Static Indexers

    In C# there is no concept of static indexers, even though static properties are there.

    Static Members & Inheritance

    A derived class can inherit a static member. The example is shown below.

    // C#:static 
    // Author: rajeshvs@msn.com
    using System;
    class MyBase
    {
    public static int x = 25;
    public static void Method()
    {
    Console.WriteLine("Base static method"); 
    }
    }
    class MyClass : MyBase
    {
    }
    class MyClient
    {
    public static void Main()
    {
    MyClass.Method(); // Displays 'Base static method'
    Console.WriteLine(MyClass.x);// Displays 25
    }
    }
    

    But a static member in C# can't be marked as override, virtual or abstract. However it is possible to hide a base class static method in a derived class by using the keyword new.

    An example is shown below.

    // C#:static & non-static
    // Author: rajeshvs@msn.com
    using System;
    class MyBase
    {
    public static int x = 25;
    public static void Method()
    {
    Console.WriteLine("Base static method"); 
    }
    }
    class MyClass : MyBase
    {
    public new static int x = 50;
    public new static void Method()
    {
    Console.WriteLine("Derived static method"); 
    }
    }
    class MyClient
    {
    public static void Main()
    {
    MyClass.Method(); // Displays 'Derived static method'
    Console.WriteLine(MyClass.x);// Displays 50
    }
    }
    

    Finally remember that it is not possible to use this to reference static methods.

    Conclusion

    I've given you enough information to use static members in your code and shown you some examples. The feedback is always welcome. Feel free to contact me for any questions or comments you may have about this article at rajeshvs@msn.com


    DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware.

    More C# Articles
    More By Rajesh V S

     

    IBM® developerWorks developerWorks - FREE Tools!


    NEW! A Layered approach to delivering security-rich Web applications

    As businesses grow increasingly dependent upon Web applications to provide services to customers, employees and partners, these complex applications become more difficult to secure. Although traditional security solutions protect Internet infrastructure layers, they do not guard against HTTP and HTML attacks. Many organizations that conduct security testing still deploy applications that allow attackers to manipulate their logic and wreak havoc on their business. To mitigate this risk, development and delivery teams must address Web application security throughout the lifecycle, addressing the many layers detailed in this paper.
    FREE! Go There Now!


    NEW! Best Practices in Integrated Requirements Management

    Poor Requirements Management capabilities in an Enterprise have been linked to excessive project failures, escalating IT costs, and failure to deliver competitive advantage into the marketplace. Join Brianna M Smith from IBM Rational and learn about how successful organizations align IT and Business stakeholders through collaborative processes and tools for effective requirements management, and how an integrated approach across the IT lifecycle can provide unparalleled visibility and traceability to ensure that project teams are delivering on the business vision by "doing the right things" and "doing things right."
    FREE! Go There Now!


    NEW! Download a free trial of WebSphere Business Modeler Advanced V6.1.1

    Visit IBM developerWorks to download a free trial version of WebSphere Business Modeler Advanced V6.1.1, IBM’s premier business process modeling and analysis tool for business users that offers process modeling, simulation, and analysis capabilities. IBM WebSphere Business Modeler helps you visualize, understand, and document business processes for continuous improvement.
    FREE! Go There Now!


    NEW! Download DB2 9.5 for Linux, Unix, and Windows

    Download a free trial version of IBM DB2 9.5 for Linux, UNIX, and Windows. DB2 9 is the result of a five-year development project that transformed traditional (static) database technology into an interactive data server that merges the high performance and ease of use of DB2 with the self-describing benefits of XML.
    FREE! Go There Now!


    NEW! Hello World: WebSphere Service Registry and Repository

    Manage, govern, and share services across your organization by using WebSphere Service Registry and Repository. Follow the hands-on exercises to learn how to navigate the Web interface to publish, find, reuse, and update services.
    FREE! Go There Now!


    NEW! Rational Testing eKits

    Discover how Rational tools and best practices for testing can make your job easier. The new Rational Testing eKits provide you with valuable resources – including demos, webcasts, tutorials, and articles – that help you address your specific testing needs across the software lifecycle. Five new eKits are available covering the topics of Requirements and Test Management, Functional Testing, Performance Testing, Code Quality and Embedded Systems, and SOA and Web Services Testing.
    FREE! Go There Now!


    NEW! Test terminal-based applications with Rational Functional Tester

    Regression testing -- in which code is thoroughly tested to ensure that changes have not produced unexpected results -- is an important part of any development process. But many testing environments neglect the terminal-based applications that still form the backbone of many industries. In this tutorial, you'll learn how the Rational Functional Tester Extension for Terminal-Based Applications works with other Rational Functional Tester to help test terminal-based applications quickly and easily.
    FREE! Go There Now!


    NEW! Try the IBM SOA Sandbox for Process

    Visit IBM developerWorks to try the IBM SOA Sandbox for process. The SOA Sandbox for process focuses on providing a trial environment with the necessary tooling and components required to gain a better understanding of business processes and how to best improve existing business processes to derive value quickly.
    FREE! Go There Now!


    NEW! Understanding Web application security challenges

    As businesses grow increasingly dependent upon Web applications, these complex entities grow more difficult to secure. Most companies equip their Web sites with firewalls, Secure Sockets Layer (SSL), and network and host security, but the majority of attacks are on applications themselves – and these technologies cannot prevent them. This paper explains what you can do to help protect your organization, and it discusses an approach for improving your organization’s Web application security.
    FREE! Go There Now!


    NEW! Webcast: Calling All Testers! Find Application Vulnerabilities Early in the Development Process Where they are Easier to Fix and Less Risky to your Business

    In this webcast, IBM Rational will discuss the importance of Web application security and will share techniques and best practices to introduce application security testing into current QA processes including: understanding common security vulnerabilities and techniques to integrate security testing with defect tracking and remediation systems in an effort to safeguard sensitive online information.
    FREE! Go There Now!



    All FREE IBM® developerWorks Tools!

    C# ARTICLES

    - Introduction to Objects and Classes in C#, P...
    - Visual C#.NET, Part 1: Introduction to Progr...
    - C# - An Introduction
    - Hotmail Exposed: Access Hotmail using C#
    - Razor Sharp C#
    - Introduction to Objects and Classes in C#
    - Making Your Code CLS Compliant
    - Programming with MySQL and .NET Technologies
    - Socket Programming in C# - Part II
    - Socket Programming in C# - Part I
    - Creational Patterns in C#
    - Type Conversions
    - Creating Custom Delegates and Events in C#
    - Inheritance and Polymorphism
    - Understanding Properties in C#







    © 2003-2008 by Developer Shed. All rights reserved. DS Cluster 6 hosted by Hostway