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

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"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
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
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
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
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
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
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
 
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
 
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
 
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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 

Recently uploaded (20)

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"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
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
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...
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
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
 
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
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
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
 
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
 
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
 
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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 

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; } }