ASP.NET
  Home arrow ASP.NET arrow Chapter 8 Shadow Fields Override Virtual M...
ASP Free Forums 
.NET  
ASP  
ASP Code  
ASP.NET  
ASP.NET Code  
BrainDump  
C#  
Code Examples  
Database  
Database Code  
IIS  
Microsoft Access  
MS SQL Server  
Silverlight  
Visual Basic.NET  
Windows Scripting  
Windows Security  
XML  
Mobile Linux 
App Generation ROI 
IBM® developerWorks 
ASP Web Hosting  
ASP.NET Web Hosting 
Windows Web Hosting
 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us Get Paid 
Request Media Kit
Contact Us 
Site Map 
Privacy Policy 
Support 
 USERNAME
 
 PASSWORD
 
 
  >>> SIGN UP!  
  Lost Password? 
ASP.NET

Chapter 8 Shadow Fields Override Virtual Methods
By: aspfree
  • Search For More Articles!
  • Disclaimer
  • Author Terms
  • Rating: 4 stars4 stars4 stars4 stars4 stars / 5
    2002-11-16

    Table of Contents:

    Rate this Article: Poor Best 
      ADD THIS ARTICLE TO:
      Del.ici.ous Digg
      Blink Simpy
      Google Spurl
      Y! MyWeb Furl
    Email Me Similar Content When Posted
    Add Developer Shed Article Feed To Your Site
    Email Article To Friend
    Print Version Of Article
    PDF Version Of Article
     
     
    ADVERTISEMENT


    A Twisted Look at Object Oriented Programming in C#

    By Jeff Louie
    11/13/2002

    I must admit that my first exposure to object oriented programming (OOP) wasfrustrating and difficult. As a hobbyist I have struggled through Z80 assemblyand EPROM burners, BASIC, Turbo Pascal, Java, C++ COM and now C#. The move toevent driven programming and then to object oriented programming presented majorconceptual hurdles to my function driven sequential programming mindset. The “aha”moment when OOP made sense was most gratifying, but did not come quickly oreasily. It has been a few years since I “got” the OOP mindset and I feelcomfortable enough now to try to help fellow travelers with this journey. If OOPcomes easily to you, feel free to skip this tutorial. If you are having problemsgetting your mind around objects and inheritance I hope this tutorial can helpyou. This tutorial does not represent a conventional teaching method. It assumesa passing knowledge of the C# language and familiarity with the Visual Studio.NET IDE. This is a work in progress and may require correction orrevisions.

    Comments are actively requested (email: Jeff_Louie@yahoo.com).

    Useful Texts

    I highly recommend the following books. Much of my understanding of OOP hasbeen gleamed from these “classic” texts and then reinforced from codingdatabase projects in Java, C++ and C#. At all times I willfully try to avoidplagiarizing these authors, but my understanding of OOP is so closely tied tothese texts that I must cite them as sources of knowledge right from thestart!

    Object-Oriented Analysis and Design with Applications GradyBooch, Second Edition, Addison-Wesley, 1994, 589pp.

    Design Patterns Elements of Reusable Object-Oriented SoftwareGamma Helm, Johnson and Vlissides, Addison-Wesley, 1994, 395pp.

    Object-Oriented Software Construction Second Edition BertrandMeyer, Prentice Hall, 1997, 1254pp.

    Of course, some of this material is a descendent of my writing from our nowout of print book:

    Visual Café for Java Explorer Database Development EditionBrogden Louie and Tittle, Coriolis, 1998, 595pp.

    Chapter 8 "Shadow Fields, Override VirtualMethods"

    Well, I am going to finish this "nuts and bolts" chapter before I flame out! I promised thatI would discuss overriding, so I am going to make good on this promise. Ingeneral when you extend a class, you shadow fields with the same name in thebase class and override virtual methods with the same name and parameter list inthe base class. Overriding makes the base class method invisible. Shadowinga field, only hides the field from view. You can still explicitly touch thehidden shadowed field if you wish. You cannot touch an invisible overriddenmethod. To demonstrate the difference between shadowing and overriding I resort,as usual, to twisted code!

    First, you can create a sample base class with a public read only field"toastTime" and a virtual method "MakeToast()":

    class Base 
    
    {
    public readonly int toastTime= 60;
    public virtual void MakeToast()
    {
    System.Console.WriteLine("MakeToastInSeconds: "
    + toastTime.ToString());
    }
    }

    Declaring the only method virtual explicitly allows a designer to overridethe MakeToast() method in a subclass. (Contrast this tothe approach in Java in which all methods are virtual by default.) This is important, since you areexplicitly allowing a subclass to completely rewrite the implementation of theMakeToast() method and in doing so make it totally invisible!

    Shadow Fields, Override Methods in the Base Class

    Now you can extend or subclass the class Base:

    /// <summary>
    
    /// Summary description for SubClass
    /// </summary>
    class SubClass : Base
    {
    public readonly
    new int toastTime= 1;
    public
    override void MakeToast()
    {
    System.Console.WriteLine("MakeToastInMinutes: "
    + toastTime.ToString());
    }
    }

    Note: You must explicitly tell the compiler that you are overriding thevirtual base class method MakeToast() with the key word overrideand that you are hiding the base field with the key word new.(You cannot override a field in a base class.)

    Overriding the method MakeToast makes the baseclass method with the same name and signature invisible to the caller of the class. This isin contrast to the base class field toastTime. The base class field toastTime is shadowed,but still potentially visible to the caller. You have shadowed a base class field and overridden a base class method.

    You can demonstrate the behavior of shadowed fields with the following test code:

    SubClass sc= new SubClass();
    
    System.Console.WriteLine(sc.toastTime.ToString()); // --> 1
    Base super= (Base)sc;
    System.Console.WriteLine(super.toastTime.ToString()); // --> 60

    In the above code snippet, the type of the reference variable determineswhich value of toastTime can be touched with the reference variable. Touchingthe field with a reference of type SubClass tells the compiler that you want totouch the the toastTime field of class SubClass. Casting thereference variable to the base type, tells the compiler that you want to touchthe toastTime field of the type Base. Both fields are potentially visible to thecaller. The base class field is shadowed, but still touchable.

    You can demonstrate the behavior of an overridden method with the followingtest code. This code demonstrates that the overridden base class method MakeToast isinvisible. You cannot touch the overridden method even if you cast the referenceto the base type.

    SubClass sc= new SubClass();
    
    sc.MakeToast(); // --> MakeToastInMinutes: 1
    Base super= (Base)sc;
    super.MakeToast(); // --> MakeToastInMinutes: 1

    Despite the cast, only the derived(specialized) classmethod is visible. If you think about it, this behavior is absolutely essential to polymorphism. Overriding insures that the"proper" implementation of a polymorphic method is called at runtime.You can demonstrate the proper polymorphic behavior with a little sample code. Here is yetanother version of the Drawable class, now with a default implementation ofDrawYourself.

    class Drawable 
    
    {
    public virtual void DrawYourself()
    {
    System.Console.WriteLine("Drawable");
    }
    }
    class Square : Drawable
    {
    public override void DrawYourself()
    {
    System.Console.WriteLine("Square");
    }
    }
    class Circle : Drawable
    {
    public override void DrawYourself()
    {
    System.Console.WriteLine("Circle");
    }
    }

    Here is the sample code that demonstrates that the "proper" implementationis called at runtime.

    Drawable draw= new Drawable();
    
    draw.DrawYourself(); //--> Drawable
    draw= new Square();
    draw.DrawYourself(); //--> Square
    draw= new Circle();
    draw.DrawYourself(); //--> Circle

    Overriding insures that the proper superclass implementation is always called at runtime. The magic of polymorphism issecure.

    You Can Hide a Method

    For completeness sake, I will mention that you can hide a virtualmethod using the key word new instead of the keyword override. Go ahead. Edit the previous codesample and replace the key word override with the key word new.

    This is the new behavior that breaks polymorphism:
    Drawable draw= new Drawable();
    
    draw.DrawYourself(); //--> Drawable
    draw= new Square();
    draw.DrawYourself(); //--> Drawable
    draw= new Circle();
    draw.DrawYourself(); //--> Drawable

    Perhaps not what you wanted!

    All Rights Reserved Jeff Louie 2002


    DISCLAIMER: The content provided in this article is not warranted or guaranteed by Developer Shed, Inc. The content provided is intended for entertainment and/or educational purposes in order to introduce to the reader key ideas, concepts, and/or product reviews. As such it is incumbent upon the reader to employ real-world tactics for security and implementation of best practices. We are not liable for any negative consequences that may result from implementing any information covered in our articles or tutorials. If this is a hardware review, it is not recommended to open and/or modify your hardware.

    More ASP.NET Articles
    More By aspfree

     

    IBM® developerWorks developerWorks - FREE Tools!


    NEW! Application Development Tools for the Mainframe Developer

    You probably have thousands of lines of COBOL code loaded with business intelligence and being used to run your business, along with an army of developers maintaining these applications. Learn how to prepare your applications and developers so you can keep that competitive edge and move to a service-oriented architecture with the IBM Rational Enterprise Modernization solutions. Replay is available for 9 months.
    FREE! Go There Now!


    NEW! BlammoSplat: Build a community Web site of OpenLaszlo animations, Part 3: The community animation

    Learn to enable users to both rate existing animations and to combine existing animations into new snippets. This is the third in a series of three tutorials that chronicle the building of a site that enables collaborative discussion and animation building using Domino and OpenLaszlo.
    FREE! Go There Now!


    NEW! Did you say mainframe? e-kit

    Learn how you can extend modern application lifecycle management to IBM System z through the IBM Rational Software Delivery Platform (SDP). The Did you say mainframe? e-kit includes podcasts, webcasts, tutorials, white and red papers, demos, and articles designed to help ease the challenges of modernizing your enterprise. This complimentary kit for mainframe developers is a practical, how-to guide for making the most of an existing development environment, including the skills and infrastructure already in place at an established enterprise.
    FREE! Go There Now!


    NEW! IBM Rational ClearCase Innovator's Series

    Learn from the best! Find out how developers use Rational ClearCase to be more flexible, innovative and deliver higher quality code in the Rational ClearCase Power Users eKit. This complimentary eKit provides a collection of materials, like articles, whitepapers, and demos that can help you become a power user of Rational ClearCase.
    FREE! Go There Now!


    NEW! IBM Rational Systems Development e-Kit

    As systems increase in complexity, communication between systems and software teams becomes more and more difficult. Now, there’s a way to improve product quality and communication.<br />Read the “Model Driven Systems Development” white paper to see how. Also included in this kit are more educational white papers, customer examples, tutorials, informative Webcasts, and best practices for designing, building and managing systems.<br />
    FREE! Go There Now!


    NEW! Innovate don't duplicate! Asset reuse strategies for success

    Asset Reuse is a key strategy for companies looking to create innovative solutions to solve complex software development problems. Searching for, identifying, updating, using and deploying software assets can be a difficult challenge. Listen to this webcast, to learn about strategies and tools that you can leverage for a successful project, including Rational Asset Manager, Rational Software Architect and WebSphere Service Registry and Repository.
    FREE! Go There Now!


    NEW! Rational Talks to You:Per Kroll on Rational Method Composer Plug-in customization

    Join this Rational Talks to You teleconference on December 11 at 1:00 pm ET to get tips on building your own plugins with Rational Method Composer. Get your questions answered!
    FREE! Go There Now!


    NEW! Run your first CICS application on a PC using TXSeries for Windows

    Learn the basics of the IBM Customer Information Control System (CICS). With a hands-on exercise, learn how to get your first CICS application up and running on your desktop using TXSeries V6.1 for Windows. The tutorial shows you how to download and install a free trial version of TXSeries V6.1.
    FREE! Go There Now!


    NEW! Trial download: IBM Rational Manual Tester V7.0.1

    Try the latest version of IBM Rational Manual Tester V7.0.1 by downloading a free trial from IBM developerWorks. This manual test authoring and execution tool promotes test step reuse to reduce the impact of software change on testers and business analysts and addresses the needs of teams performing at least a portion of their testing manually.
    FREE! Go There Now!


    NEW! Try the IBM SOA Sandbox for People

    Visit IBM developerWorks to try the IBM SOA Sandbox for people. The SOA Sandbox for people provides a trial environment with the necessary tooling and components required to enable consistent human and process interaction and collaboration, showing how you can improve user experience and business productivity.
    FREE! Go There Now!



    All FREE IBM® developerWorks Tools!

    ASP.NET ARTICLES

    - Adding Content to a Static ASP.NET Website
    - Building a Static ASP.NET Website in a Basic...
    - Develop Your First ASP.NET Website with Visu...
    - Run ASP.NET in Windows XP Home with Cassini ...
    - How to Test a Web Application
    - How to Add Code and Validation Controls to a...
    - Working in Source and Split Views to Build a...
    - How to Build a Web Form for a One-Page Web A...
    - How to Develop a One-Page Web Application
    - An ASP.NET Web Application in Action
    - Developing ASP.NET Web Applications
    - An Introduction to ASP.NET Web Programming
    - Introduction to the ADO.NET Entity Framework...
    - Completing an In-Text Advertising System und...
    - Programming an In-Text Advertising System un...





    © 2003-2009 by Developer Shed. All rights reserved. DS Cluster 5 Hosted by Hostway
    For more Enterprise Application Development news, visit eWeek