Advertisement
T-D-K

Untitled

Nov 27th, 2018
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.94 KB | None | 0 0
  1. using System;
  2.  
  3. namespace VfTable {
  4.     class Program {
  5.         static void JIT() {
  6.             Derived2Class derived2Class = new Derived2Class(0xDEAD);
  7.             DoForDerivedClass2(derived2Class);
  8.             DoForInterface(derived2Class);
  9.             DoForDerivedClass(derived2Class);
  10.             DoForBaseClass(derived2Class);
  11.         }
  12.  
  13.         static void Main() {
  14.             JIT();
  15.             Console.Clear();
  16.             Console.WriteLine("For breakpoint");
  17.             Console.ReadLine();
  18.             Derived2Class derived2Class = new Derived2Class(0xDEAD);
  19.             DoForDerivedClass2(derived2Class);
  20.             DoForInterface(derived2Class);
  21.             DoForDerivedClass(derived2Class);
  22.             DoForBaseClass(derived2Class);
  23.         }
  24.  
  25.         static void DoForDerivedClass2(Derived2Class derived2Class) {
  26.             derived2Class.InterfaceMethod();
  27.             derived2Class.InterfaceProperty = 0xBEEF;
  28.             Console.WriteLine(derived2Class.InterfaceProperty);
  29.             derived2Class.baseField1 = 64;
  30.         }
  31.  
  32.         static void DoForBaseClass(BaseClass baseClass) {
  33.             baseClass.BaseProperty1 = 0xBEEF;
  34.             baseClass.BaseProperty2 = 0xBEEF;
  35.             Console.WriteLine(baseClass.BaseProperty1);
  36.             Console.WriteLine(baseClass.BaseProperty2);
  37.             baseClass.VirtualMethod();
  38.             baseClass.NormalMethod();
  39.             BaseClass.StaticMethod();
  40.             baseClass.baseField1 = 64;
  41.         }
  42.  
  43.         static void DoForDerivedClass(DerivedClass derivedClass) {
  44.             derivedClass.DerivedProperty1 = 0xBEEF;
  45.             derivedClass.BaseProperty1 = 0xBEEF;
  46.             derivedClass.BaseProperty2 = 0xBEEF;
  47.             Console.WriteLine(derivedClass.DerivedProperty1);
  48.             Console.WriteLine(derivedClass.BaseProperty1);
  49.             Console.WriteLine(derivedClass.BaseProperty2);
  50.             derivedClass.VirtualMethod();
  51.             derivedClass.NormalMethod();
  52.             derivedClass.derivedField1 = 64;
  53.         }
  54.  
  55.         static void DoForInterface(IInterface iInterface) {
  56.             iInterface.InterfaceMethod();
  57.             Console.WriteLine(iInterface.InterfaceProperty);
  58.         }
  59.     }
  60.  
  61.     public class BaseClass {
  62.         public int baseField1;
  63.         int baseField2;
  64.         int backingFieldForBaseProperty2;
  65.  
  66.         protected readonly int baseProtectedField;
  67.  
  68.         public int BaseProperty1 { get; set; }
  69.  
  70.         public int BaseProperty2 {
  71.             get {
  72.                 Console.WriteLine("BaseProperty2 get");
  73.                 return backingFieldForBaseProperty2;
  74.             }
  75.             set {
  76.                 Console.WriteLine("BaseProperty2 set");
  77.                 backingFieldForBaseProperty2 = value;
  78.             }
  79.         }
  80.  
  81.         protected int BaseProtectedProperty { get; set; }
  82.  
  83.         public BaseClass(int param) {
  84.             baseField1 = param;
  85.             baseField2 = param;
  86.             BaseProperty1 = param;
  87.             BaseProperty2 = param;
  88.             BaseProtectedProperty = param;
  89.             baseProtectedField = param;
  90.         }
  91.  
  92.         public static void StaticMethod() {
  93.             Console.WriteLine("Static method");
  94.         }
  95.  
  96.         public void NormalMethod() {
  97.             Console.WriteLine("Normal method");
  98.             if (baseProtectedField == 100)
  99.                 throw new Exception();
  100.             if(baseField1 == 100)
  101.                 throw new Exception();
  102.             if(baseField2 == 100)
  103.                 throw new Exception();
  104.         }
  105.  
  106.         public virtual void VirtualMethod() {
  107.             Console.WriteLine("Base virtual method");
  108.         }
  109.     }
  110.  
  111.     public class DerivedClass : BaseClass {
  112.         internal int derivedField1;
  113.  
  114.         public int DerivedProperty1 { get; set; }
  115.  
  116.         public DerivedClass(int param) : base(param) {
  117.             derivedField1 = param;
  118.             DerivedProperty1 = param;
  119.             BaseProtectedProperty = param;
  120.         }
  121.  
  122.         public override void VirtualMethod() {
  123.             base.VirtualMethod();
  124.             Console.WriteLine("Derived virtual method");
  125.             if(baseProtectedField == 100)
  126.                 throw new Exception();
  127.             if(derivedField1 == 100)
  128.                 throw new Exception();
  129.             if (BaseProtectedProperty == 100)
  130.                 throw new Exception();
  131.         }
  132.     }
  133.  
  134.     public interface IInterface {
  135.         int InterfaceProperty { get; }
  136.         void InterfaceMethod();
  137.     }
  138.  
  139.     public class Derived2Class : DerivedClass, IInterface {
  140.         int derived2Field1;
  141.         public Derived2Class(int param) : base(param) {
  142.             derived2Field1 = param;
  143.             InterfaceProperty = param;
  144.         }
  145.  
  146.         public int InterfaceProperty { get; set; }
  147.         public void InterfaceMethod() {
  148.             Console.WriteLine("Interface Method");
  149.             if (derived2Field1 == 100)
  150.                 throw new Exception();
  151.         }
  152.     }
  153.  
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement