преобразование типов ссылки

тип ссылки в тип Object

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • /*класс является типом ссылки*/
  • public class Text {
  •  public void TextShow() {
  •   Console.WriteLine("Привет Мир!");
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •    
  •   Text T = new Text();
  •  
  •   /*тип Object*/
  •   //1 способ, тип ссылки в тип Object
  •   object obj0 = T;
  •   //2 способ, тип ссылки в тип Object
  •   object obj1 = new Text();
  •  
  •   //доступ к членам класса
  •   ((Text)obj0).TextShow();
  •   ((Text)obj1).TextShow();
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
Привет Мир!
Привет Мир!

тип производного класса в тип базового класса

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • /*базовый класс*/
  • public class Index {
  •  ushort showStart;
  •  ushort showEnd;
  •  public Index(ushort arg0, ushort arg1) {
  •   showStart = arg0;
  •   showEnd = arg1;
  •  }
  •  public ushort Result() {
  •   return (ushort)(showEnd - showStart);
  •  }
  • }
  •  
  • /*производный класс*/
  • public class Counter : Index {
  •  decimal price;
  •  public Counter(ushort arg0, ushort arg1, decimal arg2) : base(arg0, arg1) {
  •   price = arg2;
  •  }
  •  public decimal Sum() {
  •   return Math.Round((decimal)(Result() * price) , 2);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   Console.Write("Начальные показания счетчика : ");
  •   ushort val0 = ushort.Parse(Console.ReadLine());
  •   Console.Write("Конечные показания счетчика  : ");
  •   ushort val1 = ushort.Parse(Console.ReadLine());
  •   Console.Write("Цену за 1 кВт/ч              : ");
  •   decimal val2 = decimal.Parse(Console.ReadLine());
  •  
  •   /*обычное решение, через объект производного класса*/
  •   Counter C = new Counter(val0, val1, val2);
  •   Console.WriteLine("Сумма                        : {0}", C.Sum());
  •  
  •   /*не совсем обычное решение, через объект базового класса*/
  •   /*тип производного класса в тип базового*/
  •   Index I = new Counter(val0, val1, val2);
  •   Console.WriteLine("Сумма                        : {0}", ((Counter)I).Sum());
  •    
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
Начальные показания счетчика : 0
Конечные показания счетчика : 100
Цену за 1 кВт/ч : 0,3084
Сумма : 30,84
Сумма : 30,84

тип класса в тип интерфейса

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • /*интерфейс*/
  • public interface IResultInterface {
  •  ushort Result();
  • }
  •  
  • /*класс должен реализовывать этот интерфейс*/
  • public class Counter : IResultInterface {
  •  ushort showStart;
  •  ushort showEnd;
  •  decimal price;
  •  public Counter(ushort arg0, ushort arg1, decimal arg2) {
  •   showStart = arg0;
  •   showEnd = arg1;
  •   price = arg2;
  •  }
  •  public ushort Result() {
  •   return (ushort)(showEnd - showStart);
  •  }
  •  public decimal Sum() {
  •   return Math.Round((decimal)(Result() * price) , 2);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   Console.Write("Начальные показания счетчика : ");
  •   ushort val0 = ushort.Parse(Console.ReadLine());
  •   Console.Write("Конечные показания счетчика  : ");
  •   ushort val1 = ushort.Parse(Console.ReadLine());
  •   Console.Write("Цену за 1 кВт/ч              : ");
  •   decimal val2 = decimal.Parse(Console.ReadLine());
  •  
  •   /*обычное решение, через объект производного класса*/
  •   Counter C = new Counter(val0, val1, val2);
  •   Console.WriteLine("Сумма                        : {0}", C.Sum());
  •  
  •   /*не совсем обычное решение, через объект интерфейса*/
  •   /*тип класса в тип интерфейса*/
  •   IResultInterface I = new Counter(val0, val1, val2);
  •   Console.WriteLine("Сумма                        : {0}", ((Counter)I).Sum());
  •    
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
Начальные показания счетчика : 0
Конечные показания счетчика : 100
Цену за 1 кВт/ч : 0,3084
Сумма : 30,84
Сумма : 30,84

тип массива в тип массива

Оба массива должны иметь одинаковую размерность. При преобразовании происходит присваивание ссылок, а не значений.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   int[] ara0 = new int[3] {1, 2, 3};
  •   /*размеры массивов должны совпадать*/
  •   int[] ara1 = new int[3];
  •  
  •   /*тип массива в тип массива*/
  •   //1 вариант
  •   ara1 = ara0;
  •   for(int i=0; i<ara1.Length; i++) {
  •    Console.WriteLine("ara1[{0}] = {1}", i, ara1[i]);
  •   }
  •   Console.WriteLine();
  •  
  •   //2 вариант
  •   int[] ara2 = ara0;
  •   for(int i=0; i<ara2.Length; i++) {
  •    Console.WriteLine("ara2[{0}] = {1}", i, ara2[i]);
  •   }
  •  
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
ara1[0] = 1
ara1[1] = 2
ara1[2] = 3

ara2[0] = 1
ara2[1] = 2
ara2[2] = 3

тип массива в тип класса Array

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   int[] ara0 = new int[3] {1, 2, 3};
  •   /*размеры массивов должны совпадать*/
  •   Array Ara1 = new int[3];
  •  
  •   /*тип массива в тип массива*/
  •   //1 вариант
  •   Ara1 = ara0;
  •   for(int i=0; i<Ara1.Length; i++) {
  •    //обратите внимание на доступ к элементу массива
  •    Console.WriteLine("Ara1[{0}] = {1}", i, Ara1.GetValue(i));
  •   }
  •   Console.WriteLine();
  •  
  •   //2 вариант
  •   Array Ara2 = ara0;
  •   for(int i=0; i<Ara2.Length; i++) {
  •    //обратите внимание на доступ к элементу массива
  •    Console.WriteLine("Ara2[{0}] = {1}", i, Ara2.GetValue(i));
  •   }
  •  
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
Ara1[0] = 1
Ara1[1] = 2
Ara1[2] = 3

Ara2[0] = 1
Ara2[1] = 2
Ara2[2] = 3

тип делегата к типу Delegate

Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • /*делегат*/
  • public delegate decimal delegateSum();
  •  
  • public class Counter {
  •  ushort showStart;
  •  ushort showEnd;
  •  decimal price;
  •  public Counter(ushort arg0, ushort arg1, decimal arg2) {
  •   showStart = arg0;
  •   showEnd = arg1;
  •   price = arg2;
  •  }
  •  public ushort Result() {
  •   return (ushort)(showEnd - showStart);
  •  }
  •  public decimal Sum() {
  •   return Math.Round((decimal)(Result() * price), 2);
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •  
  •   Console.Write("Начальные показания счетчика : ");
  •   ushort val0 = ushort.Parse(Console.ReadLine());
  •   Console.Write("Конечные показания счетчика  : ");
  •   ushort val1 = ushort.Parse(Console.ReadLine());
  •   Console.Write("Цену за 1 кВт/ч              : ");
  •   decimal val2 = decimal.Parse(Console.ReadLine());
  •  
  •   /*обычное решение, через объект производного класса*/
  •   Counter C = new Counter(val0, val1, val2);
  •   Console.WriteLine("Сумма                        : {0}", C.Sum());
  •  
  •   /*ну ОЧЕНЬ совсем не обычное решение, через объект класса Delegate*/
  •   /*тип делегата к типу класса Delegate*/
  •   //инициализация делегата
  •   delegateSum dS = new delegateSum(C.Sum);
  •   //создание и инициализация переменной класса Delegate
  •   Delegate D = dS;
  •   /*
  •   обратите ВНИМАНИЕ на доступ к методу класса, через метод DynamicInvoke,
  •   если метод класса имеет параметры, их нужно передать методу DynamicInvoke,
  •   ели их нет, передаем значение null
  •   */
  •   Console.WriteLine("Сумма                        : {0}", D.DynamicInvoke(null));
  •  
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
Начальные показания счетчика : 0
Конечные показания счетчика : 100
Цену за 1 кВт/ч : 0,3084
Сумма : 30,84
Сумма : 30,84