With this post I'm gonna have brief cover on the some important Object Oriented Concepts with the help of C# and C++ coding.
Inheritance
If the object or a Class( take it as A) that based on another class( take it as B) we called A inherits B or A is a child of B. It allows to use permitted properties and methods of parent without implementing them inside the children with in children.
C++
class A{ public int Num;};//Child Classclass B : A{ public string name;};class C{ public string email;};//Multiple inheritance class D : A,C{ };C#
class A { public int Num { get; set; } } class B:A { public string name { get; set; } }Magical Static
Static is one of important keyword that programmers using rapidly. static has two meanings with the usage of it.
if static keyword is using with variable in the code that means there is only one instance of that variable through out the execution time.
if static keyword is using with method it means that method can be used without create any instance of class or outside the class.
static members are not bounded with the class.
C++
class demo{ public: static int staticVariable; static int StaticFuntion();};//set the value for static variableint demo::staticVariable = 10;int demo::StaticFuntion(){ return 3;};int main(){ cout<<demo::staticVariable<<"\n"; cout<<demo::StaticFuntion();}C#
public class Demo { public static int staicNumber { get; set; } public static int staticMethod() { return 3; } } class Demo2 { public void funtion() { MessageDialog ms = new MessageDialog(Demo.staticMethod().ToString()); ms.ShowAsync(); MessageDialog ms2 = new MessageDialog(Demo.staicNumber.ToString()); ms2.ShowAsync(); } }Access Modifiers and Key Words
Access modifiers defines the accessibility level of Class, Property or Method .
There are three basic access modifiers
- Public
- Private
- Protected
class demo{ public: int staticVariable; int StaticFuntion(); private: int staticVariable1; int StaticFuntion1(); protected: int staticVariable2; int StaticFuntion3();};But with C# there is an additional access modifier called internal this type or member can be accessed by any code in the same solution/namespace, but not from another solution/namespace.
and C# allows to use internal protected type also.
Those access modifiers are applicable for classes also
C#
public class Demo { public int MyProperty { get; set; } private int MyProperty1 { get; set; } protected int MyProperty2 { get; set; } internal int MyProperty3 { get; set; } internal protected int MyProperty4 { get; set; } }Abstract, Sealed and Partial are another useful keywords that can be using with Class and Methods in OOP in C#.
Abstract modifier indicates that the thing being modified has a missing or incomplete implementation.It indicates that a class is intended only to be a base class of other classes. Members marked as abstract, or included in an abstract class, must be implemented by classes that derive from the abstract class.
C#
public class Demo { abstract public int addition(); } public class Demo2:Demo { public override int addition() { return 10; } }Sealed modifier prevents other classes from inheriting from it. It seals the class.
Partial modifier can be used only with Classes and Methods. It makes available to split code among few classes or code pages.
C#
public partial class Sample { public void Method1() { } } public partial class Sample { public void Method2() { } } public sealed class Demo2 : Demo { private void GiveExample() { Sample Object = new Sample(); Object.Method1(); Object.Method2(); } }Polymorphism (Overloading and Overriding)
Polymorphism is a Greek word that means "many-shaped". There is two types of Polymorphism. that is
- Overloading.
- Overriding.
Overloading is when you have multiple methods in the same scope, with the same name but different signatures.
C++
class Demo { public: void Function(int i) { } void Function(string name) { }};C#
//Overloadingpublic class Demo{ public void Function(int id) {} public void Function(string name) {}}Operator Overloading
This feature is not available with Java. It allows you to change the functionality of operators with our custom arguments. But at the end it should do the similar kind of function that did previously
Scenario : Assume that we having class called liquor , and we have two instances of that Class called liquor1 and liquor2. this liquor1+liquor2 should will return total addition of all properties that liquor Class got. In here we need to overload the Operator +
Here is the Operators that can be overload
+ - * / % | & ~ ! = < > += -= *= /= %= |= &= << >> <<= >>= == != <= >= && || ++ -- , -> *-> [ ] ( ) new delete
C++
class liquor{ public : int capacity; string name; liquor operator+(liquor l1);};liquor liquor:: operator+(liquor l1) { liquor ans; ans.capacity= l1.capacity + capacity; ans.name= (l1.name + " " + name); return ans; }void Main(){ liquor liquor1; liquor1.capacity = 10; liquor1.name="Vodka"; liquor liquor2; liquor2.capacity = 20; liquor2.name = "Vine"; liquor liquor3 = liquor1 + liquor2;}C#
public class liquor { public int capacity { get; set; } public string name { get; set; } //overload the + Operator public static liquor operator +(liquor l1, liquor l2) { liquor ans = new liquor(){capacity= l1.capacity + l2.capacity,name= (l1.name + " " + l2.name)}; return ans; } } public class addition { //usage function public void returnAdition() { liquor liquor1 = new liquor() { capacity=10, name="Vodka" }; liquor liquor2 = new liquor() { capacity = 20, name = "Vine" }; liquor liquor3 = liquor1 + liquor2; } }Overriding is a principle that allows you to change the functionality of a method in a child class.
C++
class A{ public: virtual void fn(){cout<<10;}; //pure virtual member function};class B:A{ public: void fn()override{cout<<40;}//Overridden};class A{ public: void fn(){cout<<10;}; //pure virtual member function};class B:A{ public: void fn(){cout<<40;}//Overridden};C#
public class Demo { public virtual void Method2() { //Print functionality implemented } } public class Demo2 : Demo { public override void Method2() { //Print functionality implemented with some operation } }********************************************************************************
Article from - Rajarata University of Sri Lanka
********************************************************************************
Prabath Maduranga Peiris
[2008/2009 Batch] - Rajarata University of Sri Lanka
Senior Software Engineer
H-One (Pvt.)Ltd.
prabathsl@outlook.com


0 comments :