Csharp/CSharp Tutorial/Operator/is
Версия от 18:31, 26 мая 2010; (обсуждение)
Содержание
"is" operator for value data type: int, long and float
<source lang="csharp">class MainClass {
public static void Main() { int myInt = 0; bool compatible = myInt is int; System.Console.WriteLine("myInt is int = " + compatible); compatible = myInt is long; System.Console.WriteLine("myInt is long = " + compatible); compatible = myInt is float; System.Console.WriteLine("myInt is float = " + compatible); }
}</source>
myInt is int = True myInt is long = False myInt is float = False
is operator in class hiearchy
<source lang="csharp">using System;
class A {} class B : A {}
class MainClass {
public static void Main() { A a = new A(); B b = new B(); if(a is A) Console.WriteLine("a is an A"); if(b is A) Console.WriteLine("b is an A because it is derived from A"); if(a is B) Console.WriteLine("This won"t display -- a not derived from B"); if(b is B) Console.WriteLine("B is a B"); if(a is object) Console.WriteLine("a is an object"); }
}</source>
a is an A b is an A because it is derived from A B is a B a is an object
Test if someObject is, or is derived from, a TextReader using the is operator
<source lang="csharp">using System; using System.IO; class MainClass {
public static void Main() { Object someObject = new StringReader("This is a StringReader"); if (someObject is TextReader) { Console.WriteLine( "is: someObject is a TextReader or a derived class"); } }
}</source>
is: someObject is a TextReader or a derived class
Type operators: Is
Testing a Type with "is".
You can determine whether an object is of a certain type by using the "is" operator.
Its general form is shown here:
<source lang="csharp">expr is type</source>
Use is in Console.WriteLine
<source lang="csharp">using System; public class MainClass {
static void Main() { String derivedObj = "Dummy"; Object baseObj1 = new Object(); Object baseObj2 = derivedObj; Console.WriteLine( "baseObj2 {0} String", baseObj2 is String ? "is" : "isnot" ); Console.WriteLine( "baseObj1 {0} String", baseObj1 is String ? "is" : "isnot" ); Console.WriteLine( "derivedObj {0} Object", derivedObj is Object ? "is" : "isnot" ); }
}</source>
baseObj2 is String baseObj1 isnot String derivedObj is Object
Use "is" to avoid an invalid cast.
<source lang="csharp">using System;
class A {} class B : A {}
class CheckCast {
public static void Main() { A a = new A(); B b = new B(); if(a is B) b = (B) a; }
}</source>
Working with Interfaces: is operator
<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); // scale the object here. } // implementing Printable.MarginY() public void MarginY(float factor) { Console.WriteLine("MarginY: {0} {1}", text, factor); // scale the object here. } private string text;
} class Test {
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) { if (d is Printable) { Printable scalable = (Printable) d; scalable.MarginX(0.1F); scalable.MarginY(10.0F); } } }
}</source>
MarginX: A 0.1 MarginY: A 10 MarginX: B 0.1 MarginY: B 10