SlideShare a Scribd company logo
1 of 23
Download to read offline
Introduction to C#




         Lecture 4
            FCIS
Summer training 2010, 1st year.
Contents
 
     Inheritance
 
     Calling base class constructors
 
     The protected keyword
 
     Dynamic binding; virtual and override
 
     Polymorphism and assignment compatibility
 
     All classes inherit from object
 
     The need for down casts
 
     Abstract classes
 
     Examples
Inheritance
 class Employee
 {
         int salary;
         public Employee( ) { salary = 100; }
         public void Raise( ) { salary += 50;}
 }
 class Teacher : Employee
 {
         string researchTopic;
 }
 
     In this code, the class Teacher extends the employee class. This means:
         –    Members of Employee like salary, Raise( ) are also members of
              teacher (Inheritance).
         –    Objects of type teacher can be assigned to variables of type
              employee (Polymorphism).
Inheritance
 class Test
 {
      static void Main()
      {
              Teacher t = new Teacher();
              t.Raise( ); // OK
              Employee e1 = new Employee(); // OK
              Employee e2 = new Teacher(); // OK
      }
 }
Calling base constructors
 
     It is important for the derived class's constructor
     to call the constructor of it's parent.
 
     Calling the base constructor is done via the
     base keyword.
 
     Some useful rules:
       
           If (a) The derived constructor (e.g Teacher)
           doesn't call a base constructor, and (b) The
           base has a parameterless constructor, then the
           base parameterless constructor is called
           automatically.
       
           Otherwise, the derived constructor must call the
           base constructor explicitly and give it
           parameters.
Calling base constructors - 2
 This code is correct, since Teacher's default constructor calls
   Employee's default constructor

 class Employee {
       int salary;
       public Employee( ) { salary = 100; }
       public void Raise( ) { salary += 50;}
 }
 class Teacher : Employee {
       string researchTopic;
 }
Calling base constructors - 3
 This code is also correct, since Teacher's Employee's default
   constructor is still called.
 
     class Employee {
        int salary;
        public Employee( ) { salary = 100; }
        public void Raise( ) { salary += 50;}
 }
 class Teacher : Employee {
        string researchTopic;
        public Teacher() { }
 }
Calling base constructors - 4
 But this code is incorrect, since the compiler cannot know what
   parameters to give to Employee's only constructor!
 
     class Employee {
        int salary;
        public Employee(int s) { salary = s; }
        public void Raise( ) { salary += 50;}
 }
 class Teacher : Employee {
        string researchTopic;
        public Teacher() { } // ???
 }
Calling base constructors - 4
 Now the code is correct, since all of Teacher's constructors give
   the required parameters to the base class's constructors.
 
     class Employee {
        int salary;
        public Employee(int s) { salary = s; }
        public void Raise( ) { salary += 50;}
 }
 class Teacher : Employee {
        string researchTopic;
        public Teacher() : base(100) { } // OK
        public Teacher(int _salary): base(_salary) {} // OK
 }
Protected - 1
class Employee
{
    int salary;
    public Employee( ) { salary = 100; }
    public void Raise( ) { salary += 50;}
}
class Teacher : Employee
{
    string researchTopic;
    public Teacher( )
    {
        salary = 500; // WRONG! 'salary' is private
    }
}
Protected - 2
class Employee
{
    protected int salary;
    public Employee( ) { salary = 100; }
    public void Raise( ) { salary += 50;}
}
class Teacher : Employee
{
    string researchTopic;
    public Teacher( )
    {
        salary = 500; // OK! 'salary' is protected
    }
}
Overriding
 
     A class like Teacher inherits all data members
     and methods from it's parent class.
 
     But what if some of Teacher's behavior is
     different from employee?
 
     For example, what if Raise( ) should increment
     the salary by a different amount (say 51 instead
     of 50?).
 
     In this case the derived class can override the
     method from its parent class.
 
     But the parent class must allow overriding of
     this method by making it virtual.
Overriding
     class Employee {
        int salary;
        public Employee() { salary = 100; }
        public virtual void Raise( ) { salary += 50;}
 }
 class Teacher : Employee {
        string researchTopic;
        public Teacher()   { }
        public override void Raise( ) { salary += 51; }
 }
Dynamic binding
     class Employee {
         int salary;
         public Employee() { salary = 100; }
         public virtual void Raise( ) { salary += 50;}
 }
 class Teacher : Employee {
         string researchTopic;
         public Teacher()       { }
         public override void Raise( ) { salary += 51; }
 }
 class Test {
         static void Main( ) {
                  Employee e = new Teacher( );
                  e.Raise( );
                  } }
 
     Is e.salary now equal to 150 or 151?
Object...
 
     All classes inherit from object. So an instance
     of any class can be assigned to a variable of
     type object, stored in an array of objects,
     passed to functions that take objects....etc
 
     Also, object includes functions like ToString( ),
     which (a) Can be overriden and (b) Are used
     by standard .net code like Console.WriteLine
     and list boxes.
 
     What about value types (which are not
     classes)? When you assign them to objects
     they are first copied into an object with a
     reference. This is called boxing.
Downcasts
 Employee e1, e2;
 Teacher t1, t2, t3;
 e1 = new Employee( );               // OK, same type
 Teacher t1 = new Teacher( );
 e1 = t1;                           // OK, 'Teacher' is a
                                    // subtype of 'Employee'
 Teacher t2 = e2;                   // WRONG!
 Teacher t3 = (Teacher) e2;         // OK for the compiler
      
            The last line is a downcast. It means "assume e2 is really a
            reference to a 'Teacher' object"
      
            There will be a runtime check that this is the case, and an
            exception will be thrown if e2 isn't the correct type. Otherwise
            the program will go on normally.
      
            Downcasts are sometimes needed, but are usually a sign of
            bad design; use polymorphism instead.
Abstract classes
class Shape {
      public virtual double GetArea() { ... }
}
                                                      ‫ماذا نضع‬
class Square : Shape {                                 ‫هنا؟؟؟‬
    double side;
    public Square(double s) { side = s;}
    public override double GetArea() { return side*side;}
}
class Circle : Shape {
    double radius;
    public Circle(double r) { radius = r;}
    public override double GetArea()
               { return Math.PI * radius*radius;}
}
Abstract classes
abstract class Shape {
      public abstract double GetArea();
}
class Square : Shape {
    double side;
    public Square(double s) { side = s;}
    public override double GetArea() { return side*side;}
}
class Circle : Shape {
    double radius;
    public Circle(double r) { radius = r;}
    public override double GetArea()
               { return Math.PI * radius*radius;}
}
Abstract classes

    Abstract classes represent common concepts
    between many concrete classes.

    A class that has one or more abstract functions must
    also be declared abstract.

    You cannot create instances of abstract classes (but
    you're free to create references whose types are
    abstract classes).

    If a class inherits from an abstract class, it can
    become concrete by overriding all the abstract
    methods with real methods. Now it can be
    instantiated.
Extra: A simple dialog box...
To end the session, we'll show how to create a simple
    dialog box that reads a name from the user...
Creating the dialog box...




                              Value       Property       Object
btnOk   btnCancel             btnOk       AcceptButton   Form
                              btnCancel   CancelButton   Form
                    txtName   OK          DialogResult   btnOk
                              Cancel      DialogResult   btnCancel
Creating the dialog box...
In Form2:
public string GetName( )
{
     return txtName.Text;
}
Using a dialog box...
In Form1

        void btnGetName_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    DialogResult r = f.ShowDialog( ); // Show modal
    if(r == DialogResult.OK)
    {
        string name = f.GetName( );
        lblResult.Text = f;
    }
}

More Related Content

What's hot

What's hot (20)

C++ classes tutorials
C++ classes tutorialsC++ classes tutorials
C++ classes tutorials
 
Introduction to c ++ part -2
Introduction to c ++   part -2Introduction to c ++   part -2
Introduction to c ++ part -2
 
Lecture 7 arrays
Lecture   7 arraysLecture   7 arrays
Lecture 7 arrays
 
OOPS Basics With Example
OOPS Basics With ExampleOOPS Basics With Example
OOPS Basics With Example
 
Class object method constructors in java
Class object method constructors in javaClass object method constructors in java
Class object method constructors in java
 
Lecture 4_Java Method-constructor_imp_keywords
Lecture   4_Java Method-constructor_imp_keywordsLecture   4_Java Method-constructor_imp_keywords
Lecture 4_Java Method-constructor_imp_keywords
 
11. Java Objects and classes
11. Java  Objects and classes11. Java  Objects and classes
11. Java Objects and classes
 
Templates
TemplatesTemplates
Templates
 
Classes in c++ (OOP Presentation)
Classes in c++ (OOP Presentation)Classes in c++ (OOP Presentation)
Classes in c++ (OOP Presentation)
 
14. Java defining classes
14. Java defining classes14. Java defining classes
14. Java defining classes
 
20.5 Java polymorphism
20.5 Java polymorphism 20.5 Java polymorphism
20.5 Java polymorphism
 
2CPP14 - Abstraction
2CPP14 - Abstraction2CPP14 - Abstraction
2CPP14 - Abstraction
 
Python unit 3 m.sc cs
Python unit 3 m.sc csPython unit 3 m.sc cs
Python unit 3 m.sc cs
 
20.2 Java inheritance
20.2 Java inheritance20.2 Java inheritance
20.2 Java inheritance
 
Op ps
Op psOp ps
Op ps
 
Introduction to C++
Introduction to C++Introduction to C++
Introduction to C++
 
Defining classes-and-objects-1.0
Defining classes-and-objects-1.0Defining classes-and-objects-1.0
Defining classes-and-objects-1.0
 
C sharp chap5
C sharp chap5C sharp chap5
C sharp chap5
 
Constructors destructors
Constructors destructorsConstructors destructors
Constructors destructors
 
Object Oriented Programming using C++ Part III
Object Oriented Programming using C++ Part IIIObject Oriented Programming using C++ Part III
Object Oriented Programming using C++ Part III
 

Viewers also liked

Presentation skills for Graduation projects
Presentation skills for Graduation projectsPresentation skills for Graduation projects
Presentation skills for Graduation projectsmohamedsamyali
 
Computational thinking in Egypt
Computational thinking in EgyptComputational thinking in Egypt
Computational thinking in Egyptmohamedsamyali
 
Smalltalk, the dynamic language
Smalltalk, the dynamic languageSmalltalk, the dynamic language
Smalltalk, the dynamic languagemohamedsamyali
 
Themes for graduation projects 2010
Themes for graduation projects   2010Themes for graduation projects   2010
Themes for graduation projects 2010mohamedsamyali
 

Viewers also liked (7)

Spray intro
Spray introSpray intro
Spray intro
 
Erlang session1
Erlang session1Erlang session1
Erlang session1
 
Presentation skills for Graduation projects
Presentation skills for Graduation projectsPresentation skills for Graduation projects
Presentation skills for Graduation projects
 
Computational thinking in Egypt
Computational thinking in EgyptComputational thinking in Egypt
Computational thinking in Egypt
 
Erlang session2
Erlang session2Erlang session2
Erlang session2
 
Smalltalk, the dynamic language
Smalltalk, the dynamic languageSmalltalk, the dynamic language
Smalltalk, the dynamic language
 
Themes for graduation projects 2010
Themes for graduation projects   2010Themes for graduation projects   2010
Themes for graduation projects 2010
 

Similar to C# Summer course - Lecture 4

Java tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry LevelJava tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry LevelRamrao Desai
 
38-object-concepts.ppt
38-object-concepts.ppt38-object-concepts.ppt
38-object-concepts.pptRavi Kumar
 
38 object-concepts (1)
38 object-concepts (1)38 object-concepts (1)
38 object-concepts (1)Shambhavi Vats
 
oops -concepts
oops -conceptsoops -concepts
oops -conceptssinhacp
 
38 object-concepts
38 object-concepts38 object-concepts
38 object-conceptsraahulwasule
 
A457405934_21789_26_2018_Inheritance.ppt
A457405934_21789_26_2018_Inheritance.pptA457405934_21789_26_2018_Inheritance.ppt
A457405934_21789_26_2018_Inheritance.pptRithwikRanjan
 
constructors.pptx
constructors.pptxconstructors.pptx
constructors.pptxEpsiba1
 
Assignment 7
Assignment 7Assignment 7
Assignment 7IIUM
 
Chapter 5 (OOP Principles).ppt
Chapter 5 (OOP Principles).pptChapter 5 (OOP Principles).ppt
Chapter 5 (OOP Principles).ppthenokmetaferia1
 
MODULE_3_Methods and Classes Overloading.pptx
MODULE_3_Methods and Classes Overloading.pptxMODULE_3_Methods and Classes Overloading.pptx
MODULE_3_Methods and Classes Overloading.pptxVeerannaKotagi1
 
Java: Inheritance
Java: InheritanceJava: Inheritance
Java: InheritanceTareq Hasan
 
Hello. Im currently working on the last section to my assignment a.pdf
Hello. Im currently working on the last section to my assignment a.pdfHello. Im currently working on the last section to my assignment a.pdf
Hello. Im currently working on the last section to my assignment a.pdfirshadkumar3
 
Introduce oop in python
Introduce oop in pythonIntroduce oop in python
Introduce oop in pythontuan vo
 

Similar to C# Summer course - Lecture 4 (20)

Java tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry LevelJava tutorial for Beginners and Entry Level
Java tutorial for Beginners and Entry Level
 
38-object-concepts.ppt
38-object-concepts.ppt38-object-concepts.ppt
38-object-concepts.ppt
 
38 object-concepts (1)
38 object-concepts (1)38 object-concepts (1)
38 object-concepts (1)
 
oops -concepts
oops -conceptsoops -concepts
oops -concepts
 
38 object-concepts
38 object-concepts38 object-concepts
38 object-concepts
 
Basic object oriented concepts (1)
Basic object oriented concepts (1)Basic object oriented concepts (1)
Basic object oriented concepts (1)
 
OOPS
OOPSOOPS
OOPS
 
A457405934_21789_26_2018_Inheritance.ppt
A457405934_21789_26_2018_Inheritance.pptA457405934_21789_26_2018_Inheritance.ppt
A457405934_21789_26_2018_Inheritance.ppt
 
‫Chapter3 inheritance
‫Chapter3 inheritance‫Chapter3 inheritance
‫Chapter3 inheritance
 
constructors.pptx
constructors.pptxconstructors.pptx
constructors.pptx
 
Assignment 7
Assignment 7Assignment 7
Assignment 7
 
Chapter 5 (OOP Principles).ppt
Chapter 5 (OOP Principles).pptChapter 5 (OOP Principles).ppt
Chapter 5 (OOP Principles).ppt
 
MODULE_3_Methods and Classes Overloading.pptx
MODULE_3_Methods and Classes Overloading.pptxMODULE_3_Methods and Classes Overloading.pptx
MODULE_3_Methods and Classes Overloading.pptx
 
L03 Software Design
L03 Software DesignL03 Software Design
L03 Software Design
 
Java: Inheritance
Java: InheritanceJava: Inheritance
Java: Inheritance
 
Java Basic day-2
Java Basic day-2Java Basic day-2
Java Basic day-2
 
Design pattern
Design patternDesign pattern
Design pattern
 
Hello. Im currently working on the last section to my assignment a.pdf
Hello. Im currently working on the last section to my assignment a.pdfHello. Im currently working on the last section to my assignment a.pdf
Hello. Im currently working on the last section to my assignment a.pdf
 
Jar chapter 5_part_i
Jar chapter 5_part_iJar chapter 5_part_i
Jar chapter 5_part_i
 
Introduce oop in python
Introduce oop in pythonIntroduce oop in python
Introduce oop in python
 

Recently uploaded

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 

Recently uploaded (20)

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 

C# Summer course - Lecture 4

  • 1. Introduction to C# Lecture 4 FCIS Summer training 2010, 1st year.
  • 2. Contents  Inheritance  Calling base class constructors  The protected keyword  Dynamic binding; virtual and override  Polymorphism and assignment compatibility  All classes inherit from object  The need for down casts  Abstract classes  Examples
  • 3. Inheritance class Employee { int salary; public Employee( ) { salary = 100; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; }  In this code, the class Teacher extends the employee class. This means: – Members of Employee like salary, Raise( ) are also members of teacher (Inheritance). – Objects of type teacher can be assigned to variables of type employee (Polymorphism).
  • 4. Inheritance class Test { static void Main() { Teacher t = new Teacher(); t.Raise( ); // OK Employee e1 = new Employee(); // OK Employee e2 = new Teacher(); // OK } }
  • 5. Calling base constructors  It is important for the derived class's constructor to call the constructor of it's parent.  Calling the base constructor is done via the base keyword.  Some useful rules:  If (a) The derived constructor (e.g Teacher) doesn't call a base constructor, and (b) The base has a parameterless constructor, then the base parameterless constructor is called automatically.  Otherwise, the derived constructor must call the base constructor explicitly and give it parameters.
  • 6. Calling base constructors - 2 This code is correct, since Teacher's default constructor calls Employee's default constructor class Employee { int salary; public Employee( ) { salary = 100; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; }
  • 7. Calling base constructors - 3 This code is also correct, since Teacher's Employee's default constructor is still called.  class Employee { int salary; public Employee( ) { salary = 100; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher() { } }
  • 8. Calling base constructors - 4 But this code is incorrect, since the compiler cannot know what parameters to give to Employee's only constructor!  class Employee { int salary; public Employee(int s) { salary = s; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher() { } // ??? }
  • 9. Calling base constructors - 4 Now the code is correct, since all of Teacher's constructors give the required parameters to the base class's constructors.  class Employee { int salary; public Employee(int s) { salary = s; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher() : base(100) { } // OK public Teacher(int _salary): base(_salary) {} // OK }
  • 10. Protected - 1 class Employee { int salary; public Employee( ) { salary = 100; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher( ) { salary = 500; // WRONG! 'salary' is private } }
  • 11. Protected - 2 class Employee { protected int salary; public Employee( ) { salary = 100; } public void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher( ) { salary = 500; // OK! 'salary' is protected } }
  • 12. Overriding  A class like Teacher inherits all data members and methods from it's parent class.  But what if some of Teacher's behavior is different from employee?  For example, what if Raise( ) should increment the salary by a different amount (say 51 instead of 50?).  In this case the derived class can override the method from its parent class.  But the parent class must allow overriding of this method by making it virtual.
  • 13. Overriding class Employee { int salary; public Employee() { salary = 100; } public virtual void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher() { } public override void Raise( ) { salary += 51; } }
  • 14. Dynamic binding class Employee { int salary; public Employee() { salary = 100; } public virtual void Raise( ) { salary += 50;} } class Teacher : Employee { string researchTopic; public Teacher() { } public override void Raise( ) { salary += 51; } } class Test { static void Main( ) { Employee e = new Teacher( ); e.Raise( ); } }  Is e.salary now equal to 150 or 151?
  • 15. Object...  All classes inherit from object. So an instance of any class can be assigned to a variable of type object, stored in an array of objects, passed to functions that take objects....etc  Also, object includes functions like ToString( ), which (a) Can be overriden and (b) Are used by standard .net code like Console.WriteLine and list boxes.  What about value types (which are not classes)? When you assign them to objects they are first copied into an object with a reference. This is called boxing.
  • 16. Downcasts Employee e1, e2; Teacher t1, t2, t3; e1 = new Employee( ); // OK, same type Teacher t1 = new Teacher( ); e1 = t1; // OK, 'Teacher' is a // subtype of 'Employee' Teacher t2 = e2; // WRONG! Teacher t3 = (Teacher) e2; // OK for the compiler  The last line is a downcast. It means "assume e2 is really a reference to a 'Teacher' object"  There will be a runtime check that this is the case, and an exception will be thrown if e2 isn't the correct type. Otherwise the program will go on normally.  Downcasts are sometimes needed, but are usually a sign of bad design; use polymorphism instead.
  • 17. Abstract classes class Shape { public virtual double GetArea() { ... } } ‫ماذا نضع‬ class Square : Shape { ‫هنا؟؟؟‬ double side; public Square(double s) { side = s;} public override double GetArea() { return side*side;} } class Circle : Shape { double radius; public Circle(double r) { radius = r;} public override double GetArea() { return Math.PI * radius*radius;} }
  • 18. Abstract classes abstract class Shape { public abstract double GetArea(); } class Square : Shape { double side; public Square(double s) { side = s;} public override double GetArea() { return side*side;} } class Circle : Shape { double radius; public Circle(double r) { radius = r;} public override double GetArea() { return Math.PI * radius*radius;} }
  • 19. Abstract classes  Abstract classes represent common concepts between many concrete classes.  A class that has one or more abstract functions must also be declared abstract.  You cannot create instances of abstract classes (but you're free to create references whose types are abstract classes).  If a class inherits from an abstract class, it can become concrete by overriding all the abstract methods with real methods. Now it can be instantiated.
  • 20. Extra: A simple dialog box... To end the session, we'll show how to create a simple dialog box that reads a name from the user...
  • 21. Creating the dialog box... Value Property Object btnOk btnCancel btnOk AcceptButton Form btnCancel CancelButton Form txtName OK DialogResult btnOk Cancel DialogResult btnCancel
  • 22. Creating the dialog box... In Form2: public string GetName( ) { return txtName.Text; }
  • 23. Using a dialog box... In Form1  void btnGetName_Click(object sender, EventArgs e) { Form2 f = new Form2(); DialogResult r = f.ShowDialog( ); // Show modal if(r == DialogResult.OK) { string name = f.GetName( ); lblResult.Text = f; } }