Subclass System.Attribute

image_pdfimage_print
   
 
using System;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
public class AuthorAttribute : System.Attribute
{
    private string company; 
    private string name;

    public AuthorAttribute(string name)
    {
        this.name = name;
        company = "";
    }

    public string Company
    {
        get { return company; }
        set { company = value; }
    }

    public string Name
    {
        get { return name; }
    }
}


[assembly: Author("Tom", Company = "Ltd.")]
[Author("Tom", Company = "Abc Ltd.")]
class SomeClass { }

[Author("Lena")]
public class SomeOtherClass
{
}


[Author("FirstName")]
[Author("Jack", Company = "Ltd.")]
class MainClass
{
    public static void Main()
    {
        Type type = typeof(MainClass);

        object[] attrs = type.GetCustomAttributes(typeof(AuthorAttribute), true);

        foreach (AuthorAttribute a in attrs)
        {
            Console.WriteLine(a.Name + ", " + a.Company);
        }
    }
}

    


Using the as Keyword to Work with an Interface

image_pdfimage_print
   
 


using System;
   
public interface IPrintMessage
{
    void Print();
};
   
class Class1
{
    public void Print()
    {
        Console.WriteLine("Hello from Class1!");
    }
}
   
class Class2 : IPrintMessage
{
    public void Print()
    {
        Console.WriteLine("Hello from Class2!");
    }
}
   
class MainClass
{
    public static void Main()
    {
        PrintClass   PrintObject = new PrintClass();
   
        PrintObject.PrintMessages();
    }
}
   
class PrintClass
{
    public void PrintMessages()
    {
        Class1      Object1 = new Class1();
        Class2      Object2 = new Class2();
   
        PrintMessageFromObject(Object1);
        PrintMessageFromObject(Object2);
    }
   
    private void PrintMessageFromObject(object obj)
    {
        IPrintMessage PrintMessage;
   
        PrintMessage = obj as IPrintMessage;
        if(PrintMessage != null)
            PrintMessage.Print();
    }
}

    


as operator

image_pdfimage_print
   
 


using System;
   
class Employee { }
   
class ContractEmployee : Employee { }
   
class CastExample5
{
    public static void Main ()
    {
        Employee e = new Employee();
        Console.WriteLine("e = {0}", e == null ? "null" : e.ToString());
   
        ContractEmployee c  = e as ContractEmployee;
        Console.WriteLine("c = {0}", c == null ? "null" : c.ToString());
    }
}

    


Demonstrate a using alias

image_pdfimage_print

   

// Demonstrate a using alias. 
 
using System; 
 
// Create an alias for Counter.CountDown. 
using Count = Counter.CountDown; 
 
// Declare a namespace for counters. 
namespace Counter { 
  // A simple countdown counter. 
  class CountDown { 
    int val; 
 
    public CountDown(int n) { 
      val = n; 
    } 
 
    public void reset(int n) { 
      val = n; 
    } 
 
    public int count() { 
      if(val > 0) return val--; 
      else return 0; 
    } 
  } 
} 
 
public class NSDemo4 { 
  public static void Main() { 
    // Here, Count is used as a name for Counter.CountDown. 
    Count cd1 = new Count(10); 
    int i; 
 
    do { 
      i = cd1.count(); 
      Console.Write(i + " "); 
    } while(i > 0); 
    Console.WriteLine(); 
 
    Count cd2 = new Count(20); 
 
    do { 
      i = cd2.count(); 
      Console.Write(i + " "); 
    } while(i > 0); 
    Console.WriteLine(); 
 
    cd2.reset(4); 
    do { 
      i = cd2.count(); 
      Console.Write(i + " "); 
    } while(i > 0); 
    Console.WriteLine(); 
  } 
}