Csharp/CSharp Tutorial/Operator/as
Содержание
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>
- expr is the expression being cast to type.
- On succeed, a reference to type is returned.
- Otherwise, a null reference is returned.