Polymorphis Abstract Interface Samplecode4csharp

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Polymorphis Abstract Interface Samplecode4csharp as PDF for free.

More details

  • Words: 1,861
  • Pages: 14
Make a console C# project and use this code. Enjoy…

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication_test { class testClassRules //test polymorphism, abstract classes, interfaces { static void Main(string[] args) { //*************************************************************** ********************Polymorphism test /*car c = new car(); benz b = new benz(); porche p = new porche(); Console.WriteLine("This is a car"); c.describeMe(); Console.WriteLine("---------------");

Console.WriteLine("This is a car but a benz"); b.describeMe(); Console.WriteLine("..............."); Console.WriteLine("This is a car"); c.describeMe(); Console.WriteLine("---------------"); Console.WriteLine("This is a car but a porche"); p.describeMe(); Console.WriteLine("..............."); Console.WriteLine("This is a car but a benz"); b.describeMe(); Console.WriteLine("..............."); Console.WriteLine("This is a car"); c.describeMe(); Console.WriteLine("...............");*/ /* //test new mycar[] cars = new mycar[3];

cars[0] = new mycar(); cars[1] = new benz(); cars[2] = new porche(); foreach (mycar c in cars) { c.normalTest(); //c.describeMe(); c.virNewTest(); //c.newTest(); Console.WriteLine("\n-------------------------\n"); }*/ //Console.WriteLine("-------------------------\n"); //DerivedClass B = new DerivedClass(); //B.DoWork(); // Calls the new method. ///*BaseClass A = (BaseClass)B; //A.DoWork(); // Also calls the new method.*/ //BaseClass A = new BaseClass(); //A.DoWork(); //Console.WriteLine("\n-------------------------"); //Console.WriteLine("-------------------------\n"); //mycar c = new mycar(); //benz b = new benz(); //porche p = new porche(); //c.newTest(); //b.newTest(); //p.newTest(); //c.describeMe(); //b.describeMe(); //p.describeMe(); //Console.WriteLine("\n-------------------------"); //Console.WriteLine("-------------------------\n"); //mycar[] //cars[0] //cars[1] //cars[2]

cars = new mycar[3]; = new mycar(); = new benz(); = new porche();

//foreach (mycar mc in cars) //{ // //mc.normalTest(); // //mc.describeMe(); // //mc.virNewTest();

// // //}

//((benz)mc).newTest(); mc.newTest();

//Console.WriteLine("\n-------------------------"); //Console.WriteLine("-------------------------\n"); //((mycar)cars[0]).newTest(); //((benz)cars[1]).newTest(); //((porche)cars[2]).newTest(); //((mycar)cars[0]).describeMe(); //((benz)cars[1]).describeMe(); //((porche)cars[2]).describeMe(); //Console.WriteLine("\n-------------------------"); //Console.WriteLine("-------------------------\n"); //Car c1 = new Car(); //ConvertibleCar cc = new ConvertibleCar(); //Minivan mv = new Minivan(); //c1.DescribeCar(); //cc.DescribeCar(); //mv.DescribeCar(); //Console.WriteLine("\n-------------------------"); //Console.WriteLine("-------------------------\n"); //Car[] myC = new Car[3]; //myC[0] = new Car(); //myC[1] = new ConvertibleCar(); //myC[2] = new Minivan(); //foreach( Car cm in myC ) //{ // cm.DescribeCar(); //} //*************************************************************** ********************Abstract test //abstractBaseClass a = new abstractBaseClass("test"); //not possible, cannot instantiate an abstract class //derivedAbstract d = new derivedAbstract("test"); //d.i = 4; //System.Console.WriteLine("The value of i is {0}", d.i); //System.Console.WriteLine(d.getName()); //d.meth(); //derivedAbstract te = new derivedAbstract("this is just a test"); //te.testField = "this is values through the field itself"; //System.Console.WriteLine(te.testField); //te.testProperty = "\nthis is values through its property"; //System.Console.WriteLine(te.testProperty);

//*************************************************************** ********************Interface test //ICar c = new ICar(); //Cannot instantiate an interface ZZR z1 = new ZZR("My first ZZR", "EDFV676GHG0"); ZZR z2 = new ZZR("My second ZZR", "EDFV676GHG0", 890, 7); //System.Console.WriteLine("Specification of z1"); System.Console.WriteLine("\nSpecification of '{3}'\nEngin No:{0}\nEngine Volume:{1}\nNumber of Cylinders:{2}", z1.enginNo, z1.Volume, z1.cylinderNo, z1.vehicleName); System.Console.WriteLine("\nSpecification of '{3}'\nEngin No:{0}\nEngine Volume:{1}\nNumber of Cylinders:{2}", z2.enginNo, z2.Volume, z2.cylinderNo, z2.vehicleName); //System.Console.WriteLine(z1.EnginNo); Boxter b = new Boxter("My Boxter", "EDFV676GH980", 2700, 6); System.Console.WriteLine("\nSpecification of '{3}'\nEngin No:{0}\nEngine Volume:{1}\nNumber of Cylinders:{2}", b.enginNo, b.Volume, b.cylinderNo, b.vehicleName); Strange1 s1 = new Strange1("\n\n\nStrange1", "BGHVX^&HSGY", 9876, 12);

System.Console.WriteLine("Property CylinderNo", s1.CylinderNo); //System.Console.WriteLine("Method CylNo", Convert.ToString((double)(s1.cylNo))); System.Console.WriteLine("Method CylNo", s1.EnginNo); Strange2 s2 = new Strange2(); s2.volume = 4; s2.EnginNo = "None of the interfaces implementation"; System.Console.WriteLine("\n\nProperty Volume:{0}", s2.volume); System.Console.WriteLine("Method CylNo[of ICar interface]:{0}", ((ICar)s2).cylNo()); System.Console.WriteLine("No interfaces implementation:{0}", s2.EnginNo); //this is not possible because each interfaces has their won implementation of //Engine No and class Strange2 doesnt have a defnition foe EngineNo itself //unless we define a seperate EngineNo property for class itself ((ICar)s2).EnginNo = "CAR_HSHSJH877JH"; ((IMotorBike)s2).EnginNo = "MOTORBIKR_HGBGF676G7"; System.Console.WriteLine("\n\nEngine No(of ICar interface):{0}", ((ICar)s2).EnginNo); System.Console.WriteLine("Engine No(of IMotorBike interface):{0}", ((IMotorBike)s2).EnginNo); //or ICar cs2 = (ICar)s2; //cs2.EnginNo = "CAR_HSHSJH877JH"; System.Console.WriteLine("\n\nEngine No(of ICar interface):{0}", cs2.EnginNo);

IMotorBike ms2 = (IMotorBike)s2; //ms2.EnginNo = "MOTORBIKR_HGBGF676G7"; System.Console.WriteLine("\n\nEngine No(of IMotorBike interface):{0}", ms2.EnginNo); //************************************************ Exit Part *******************************************// System.Console.Write("\n\n\npress any key to exit..."); System.Console.ReadKey();

}

}

} //***************************************************************Polymorphism examples //*************************************************************************** ********* public class mycar { public virtual void describeMe() { Console.WriteLine("I am a car"); } public void newTest() { Console.WriteLine("I am in new:car"); } public virtual void virNewTest() { Console.WriteLine("I am in new virtual:car"); }

}

public void normalTest() { Console.WriteLine("I am in normal test:car"); }

public class benz : mycar { public override void describeMe() { //base.describeMe(); Console.WriteLine("And I am a benz"); } public new void newTest() { Console.WriteLine("I am in new:benz");

} public new void virNewTest() { Console.WriteLine("I am in new virtual:benz"); }

}

public new void normalTest() { Console.WriteLine("I am in normal test:benz"); }

public class porche : mycar { public override void describeMe() { Console.WriteLine("i am a porche"); } public new void newTest() { Console.WriteLine("I am in new:porche"); } public new void virNewTest() { Console.WriteLine("I am in new virtual:porche"); }

}

public new void normalTest() { Console.WriteLine("I am in normal test:porche"); }

class Car { public virtual void DescribeCar() { System.Console.WriteLine("Just a car."); } } class ConvertibleCar : Car { public new virtual void DescribeCar() { System.Console.WriteLine("a convertable car."); } } class Minivan : Car

{

}

public override void DescribeCar() { System.Console.WriteLine("a minivan car."); }

public class BaseClass { public virtual void DoWork() { System.Console.WriteLine("doWork }

}

public virtual int WorkProperty { get { return 0; } }

public class DerivedClass : BaseClass { public override void DoWork() { System.Console.WriteLine("doWork }

}

in 'BaseClass'");

in 'DerivedClass'");

public override int WorkProperty { get { return 0; } }

//***************************************************************Abstract example //*************************************************************************** **** public abstract class abstractBaseClass { private string name; public int i; //(*) public string testField; public int I //this one should be declared as lower case before at (*) and should be capitall i if it is in lower case then you will have stack exception overflow errors { get { return i; } set { i = value; } }

public string testProperty //a property has same access level and type of the field that it has access to but it should have a different name { get { return (this.testField); } set { this.testField = value; } } public abstractBaseClass(string str) { this.name = str; } public string getName() { return this.name; } public virtual void test() { System.Console.WriteLine("i am in test:abstractBaseClass"); } //public abstract void meth() { } //because it is abstract so it cannot have a body //so it should be declared as below public abstract void meth(); //public abstract virtual void abstVirt(); //an abstract method cannot be virtual because it cannot have a body anyway //so it should be declared either as virtual or abstract public virtual void testVirt(){} } public class derivedAbstract : abstractBaseClass { //public int j; //public int i //{ // get { return i; } // set { j = value; } //} public derivedAbstract(string str) : base(str) { //:base(str); } public override void test() { }

System.Console.WriteLine("i am in test:abstractBaseClass");

//public void meth() //because this is an abstract method in base class so we should explicitle mention override key word //so it should be written as below public override void meth() //{ // throw new Exception("The method or operation is not implemented."); //} { System.Console.WriteLine("this is the implementation of an abstract method"); } }

//***************************************************************Interface example //*************************************************************************** ***** interface IVehicle { //public string vId;

//error interfaces cannot contain fields

//string vId //interfacase cannot have properties this way becauser we have the definition //{ // get { } //we shouldnt have those brackets so only get; // set { } //} string vehicleName { get; set; } } interface ICar : IVehicle { //public string engineNo string EnginNo { get; set; } int Volume { get; set; } int cylNo(); } interface IMotorBike : IVehicle

//interfaces cannot contain modifier public

{

string EnginNo { get; set; } int Volume { get; set; } int cylNo();

} public class ZZR : IMotorBike { public string vName; public string enginNo; public int volume; public int cylinderNo; public ZZR(string name, string eNo, int vol, int cyl) { //this.engineNo(eNo); //this is wrong because we have treated a property like a method this.enginNo = eNo; //cylinderNo(cyl); //this is wrong because we have treated a property like a method this.cylinderNo = cyl; //this.volume(vol); //this is wrong because we have treated a property like a method this.volume = vol; this.vName = name; } public ZZR(string name, string eNo) { this.enginNo = eNo; this.cylinderNo = 6; this.volume = 750; this.vName = name; } public string vehicleName { get { return (this.vName); } set { this.vName = value; } } public string EnginNo { get { return(this.enginNo); } set { this.enginNo = value; } }

public int Volume { get { return (this.volume); } set {this.volume = value;} } public int CylinderNo { get { return (this.cylinderNo); } set { this.cylinderNo = value; } } public int cylNo() { return(this.cylinderNo); } } public class Boxter : ICar { public string vName; public string enginNo; public int volume; public int cylinderNo; public Boxter(string name, string eNo, int vol, int cyl) { //this.engineNo(eNo); //this is wrong because we have treated a property like a method this.enginNo = eNo; //cylinderNo(cyl); //this is wrong because we have treated a property like a method this.cylinderNo = cyl; //this.volume(vol); //this is wrong because we have treated a property like a method this.volume = vol; this.vName = name; } public string vehicleName { get { return (this.vName); } set { this.vName = value; } } public string EnginNo { get { return (this.enginNo); } set { this.enginNo = value; } } public int Volume { get { return (this.volume); } set {this.volume = value;} }

public int CylinderNo { get { return (this.cylinderNo); } set { this.cylinderNo = value; } } public int cylNo() { return (this.cylinderNo); } } public class Strange1 : ICar, IMotorBike { public string vName; public string enginNo; public int volume; public int cylinderNo; public Strange1(string name, string eNo, int vol, int cyl) { //this.engineNo(eNo); //this is wrong because we have treated a property like a method this.enginNo = eNo; //cylinderNo(cyl); //this is wrong because we have treated a property like a method this.cylinderNo = cyl; //this.volume(vol); //this is wrong because we have treated a property like a method this.volume = vol; this.vName = name; } public string vehicleName { get { return (this.vName); } set { this.vName = value; } } public string EnginNo { get { return (this.enginNo); } set { this.enginNo = value; } } public int Volume { get { return (this.volume); } set {this.volume = value;} } public int CylinderNo { get { return (this.cylinderNo); } set { this.cylinderNo = value; } }

public int cylNo() { return (this.cylinderNo); } } public class Strange2 : ICar, IMotorBike { public string vName; public string enginNo; public int volume; public int cylinderNo; public string vehicleName { get { return (this.vName); } set { this.vName = value; } } //public string ICar.EnginNo //when we specify explicitly which part of which interface we are implementing we shouldnt sepecify the modifier string ICar.EnginNo { get { return (this.enginNo); } set { this.enginNo = value; } } public string EnginNo { get { return (this.enginNo); } set { this.enginNo = value; } } //public int ICar.Volume int ICar.Volume { get { return (this.volume); } set {this.volume = value;} } //public string IMotorBike.EnginNo string IMotorBike.EnginNo { get { return (this.enginNo + "XXX"); } set { this.enginNo = value ; } } //public int IMotorBike.Volume int IMotorBike.Volume { get { return (this.volume); } set { this.volume = value - 100; } } public int CylinderNo { get { return (this.cylinderNo); }

}

set { this.cylinderNo = value; }

//when we explicitle implement one part of one of the interfaces that this class inherits, we should implements the same part of the other interfaces //this is true in this case that both interfaces have a method with the same name //public int ICar.cylNo() int ICar.cylNo() { return (this.cylinderNo); } //public int IMotorBike.cylNo() int IMotorBike.cylNo() { return (this.cylinderNo); } }

Related Documents