Csharp/CSharp Tutorial/Operator/as

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

as operator in class hearchy

<source lang="csharp">using System;

class A {} class B : A {}

class MainClass {

 public static void Main() { 
   A a = new A(); 
   B b = new B(); 

   b = a as B; // cast, if possible 

   if(b==null)  
     Console.WriteLine("Cast b = (B) a is NOT allowed."); 
   else 
     Console.WriteLine("Cast b = (B) a is allowed"); 
 } 

}</source>

Cast b = (B) a is NOT allowed.

The As Operator for custom class type

<source lang="csharp">using System; interface Printable {

   void MarginX(float factor);
   void MarginY(float factor);

} public class Component {

   public Component() {}

} public class TextField: Component, Printable {

   public TextField(string text)
   {
       this.text = text;
   }
   // implementing Printable.MarginX()
   public void MarginX(float factor)
   {
       Console.WriteLine("MarginX: {0} {1}", text, factor);
   }
   
   // implementing Printable.MarginY()
   public void MarginY(float factor)
   {
       Console.WriteLine("MarginY: {0} {1}", text, factor);
   }
   
   private string text;

} class MainClass {

   public static void Main()
   {
       Component[] dArray = new Component[100];
       
       dArray[0] = new Component();
       dArray[1] = new TextField("A");
       dArray[2] = new TextField("B");
       
       foreach (Component d in dArray)
       {
           Printable scalable = d as Printable;
           if (scalable != null)
           {
               scalable.MarginX(0.1F);
               scalable.MarginY(10.0F);
           }
       }
   }

}</source>

MarginX: A 0.1
MarginY: A 10
MarginX: B 0.1
MarginY: B 10

Use the "as" operator to perform a safe cast

<source lang="csharp">using System; using System.IO; class MainClass {

   public static void Main() 
   {
       Object someObject = new StringReader("This is a StringReader");
       
       StringReader reader = someObject as StringReader;
       if (reader != null) 
       {
           Console.WriteLine("as: someObject is a StringReader");
       }
   }

}</source>

as: someObject is a StringReader

Using as

You can use the as operator to cast without raising an exception if the cast fails.

The general form:


<source lang="csharp">expr as type</source>

  1. expr is the expression being cast to type.
  2. On succeed, a reference to type is returned.
  3. Otherwise, a null reference is returned.