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

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
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
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
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
 
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
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
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
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
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
 
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
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Recently uploaded (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
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!
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
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
 
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)
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
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
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
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
 
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
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

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