Csharp/C Sharp/Language Basics/is

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

choose between two overloaded methods at run-time using the "is" keyword

<source lang="csharp"> using System; public class BankAccount {

   virtual public void Withdraw() {
       Console.WriteLine("Call to BankAccount.Withdraw()");
   }

} public class SavingsAccount : BankAccount {

   override public void Withdraw() {
       Console.WriteLine("Call to SavingsAccount.Withdraw()");
   }

} public class MainClass {

   public static void Main(string[] strings) {
       BankAccount ba = new BankAccount();
       Test(ba);
       SavingsAccount sa = new SavingsAccount();
       Test(sa);
   }
   public static void Test(BankAccount baArgument) {
       if (baArgument is SavingsAccount) {
           SavingsAccount saArgument = (SavingsAccount)baArgument;
           saArgument.Withdraw();
       } else {
           baArgument.Withdraw();
       }
   }

}

</source>


is Checker

<source lang="csharp"> using System; using System.Collections.Generic; using System.Text; class Checker {

   public void Check(object param1) {
       if (param1 is ClassA)
           Console.WriteLine("Variable can be converted to ClassA.");
       else
           Console.WriteLine("Variable can"t be converted to ClassA.");
       if (param1 is IMyInterface)
           Console.WriteLine("Variable can be converted to IMyInterface.");
       else
           Console.WriteLine("Variable can"t be converted to IMyInterface.");
       if (param1 is MyStruct)
           Console.WriteLine("Variable can be converted to MyStruct.");
       else
           Console.WriteLine("Variable can"t be converted to MyStruct.");
   }

} interface IMyInterface { } class ClassA : IMyInterface { } class ClassB : IMyInterface { } class ClassC { } class ClassD : ClassA { } struct MyStruct : IMyInterface { } class Program {

   static void Main(string[] args) {
       Checker check = new Checker();
       ClassA try1 = new ClassA();
       ClassB try2 = new ClassB();
       ClassC try3 = new ClassC();
       ClassD try4 = new ClassD();
       MyStruct try5 = new MyStruct();
       object try6 = try5;
       Console.WriteLine("Analyzing ClassA type variable:");
       check.Check(try1);
       Console.WriteLine("\nAnalyzing ClassB type variable:");
       check.Check(try2);
       Console.WriteLine("\nAnalyzing ClassC type variable:");
       check.Check(try3);
       Console.WriteLine("\nAnalyzing ClassD type variable:");
       check.Check(try4);
       Console.WriteLine("\nAnalyzing MyStruct type variable:");
       check.Check(try5);
       Console.WriteLine("\nAnalyzing boxed MyStruct type variable:");
       check.Check(try6);
       Console.ReadKey();
   }

}

</source>


The is operator confirms that the employee is a manager.

<source lang="csharp"> using System;

public class Starter {

   public static void Main() {
       Manager person = new Manager("Accounting");
       Console.WriteLine("[Menu]\n");
       Console.WriteLine("Task 1");
       Console.WriteLine("Task 2");
       if (person is IManager) {
           IManager mgr = person;
           Console.WriteLine("\n[{0} Menu]\n",mgr.Department);
           Console.WriteLine("Task 3");
       }
   }

} public interface IManager {

   string Department {
       get;
   }

} public class Employee { } public class SalariedEmployee : Employee { } public class Manager : SalariedEmployee, IManager {

   public Manager(string dept) {
       propDepartment = dept;
   }
   private string propDepartment;
   public string Department {
       get {
           return propDepartment;
       }
   }

}

</source>


Using the is Keyword to Work with an Interface

<source lang="csharp">

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)
   {
       if(obj is IPrintMessage)
       {
           IPrintMessage PrintMessage;
  
           PrintMessage = (IPrintMessage)obj;
           PrintMessage.Print();
       }
   }

}

</source>