304
Part I: The C# Language
class Derived1 : Base {
// Override Who() in a derived class.
public override void Who() {
Console.WriteLine("Who() in Derived1");
}
}
class Derived2 : Base {
// This class does not override Who().
}
class NoOverrideDemo {
static void Main() {
Base baseOb = new Base();
Derived1 dOb1 = new Derived1();
Derived2 dOb2 = new Derived2();
Base baseRef; // a base class reference
baseRef = baseOb;
baseRef.Who();
baseRef = dOb1;
baseRef.Who();
baseRef = dOb2;
baseRef.Who(); // calls Base's Who()
}
}
The output from this program is shown here:
Who() in Base
Who() in Derived1
Who() in Base
Here, Derived2 does not override Who( ). Thus, when Who( ) is called on a Derived2
object, the Who( ) in Base is executed.
In the case of a multilevel hierarchy, if a derived class does not override a virtual 
method, then, while moving up the hierarchy, the first override of the method that is 
encountered is the one executed. For example:
/*  In a multilevel hierarchy, the first override of a virtual
method that is found while moving up the hierarchy is the
one executed. */
using System;
class Base {
// Create virtual method in the base class.
public virtual void Who() {
Console.WriteLine("Who() in Base");
Pdf merge files - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
add multiple pdf files into one online; c# combine pdf
Pdf merge files - VB.NET PDF File Merge Library: Merge, append PDF files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET Guide and Sample Codes to Merge PDF Documents in .NET Project
reader combine pdf; pdf merger online
P
A
R
T
I
Chapter 11: Inheritance 
305
P
A
R
T
I
P
A
R
T
I
}
}
class Derived1 : Base {
// Override Who() in a derived class.
public override void Who() {
Console.WriteLine("Who() in Derived1");
}
}
class Derived2 : Derived1 {
// This class also does not override Who().
}
class Derived3 : Derived2 {
// This class does not override Who().
}
class NoOverrideDemo2 {
static void Main() {
Derived3 dOb = new Derived3();
Base baseRef; // a base class reference
baseRef = dOb;
baseRef.Who(); // calls Derived1's Who()
}
}
The output is shown here:
Who() in Derived1
Here, Derived3 inherits Derived2, which inherits Derived1, which inherits Base. As the 
output verifies, since Who( ) is not overridden by either Derived3 or Derived2, it is the 
override of Who( ) in Derived1 that is executed, since it is the first version of Who( ) that 
is found.
One other point: Properties can also be modified by the virtual keyword and overridden 
usingoverride. The same is true for indexers.
Why Overridden Methods?
Overridden methods allow C# to support runtime polymorphism. Polymorphism is essential 
to object-oriented programming for one reason: It allows a general class to specify methods 
e another 
classes and derived classes form a hierarchy that moves from lesser to greater specialization. 
Used correctly, the base class provides all elements that a derived class can use directly. Through 
own. This allows the derived class flexibility, yet still enforces a consistent interface. Thus, 
form of the methods that will be used by all of its derived classes.
Online Merge PDF files. Best free online merge PDF tool.
Online Merge PDF, Multiple PDF files into one. Download Free Trial. Easy converting! We try to make it as easy as possible to merge your PDF files.
pdf merge; add pdf files together reader
Online Split PDF file. Best free online split PDF tool.
Easy split! We try to make it as easy as possible to split your PDF files into Multiple ones. You can receive the PDF files by simply
batch merge pdf; acrobat reader merge pdf files
306
Part I: The C# Language
Applying Virtual Methods
T
TwoDShape
class. In the preceding examples, each class derived from TwoDShape defines a method 
calledArea( ). This suggests that it might be better to make Area( ) a virtual method of the 
TwoDShape class, allowing each derived class to override it, defining how the area is 
ogram does 
this. For convenience, it also adds a name property to TwoDShape. (This makes it easier 
to demonstrate the classes.)
// Use virtual methods and polymorphism.
using System;
class TwoDShape {
double pri_width;
double pri_height;
// A default constructor.
public TwoDShape() {
Width = Height = 0.0;
name = "null";
}
// Parameterized constructor.
public TwoDShape(double w, double h, string n) {
Width = w;
Height = h;
name = n;
}
// Construct object with equal width and height.
public TwoDShape(double x, string n) {
Width = Height = x;
name = n;
}
// Construct a copy of a TwoDShape object.
public TwoDShape(TwoDShape ob) {
Width = ob.Width;
Height = ob.Height;
name = ob.name;
}
// Properties for Width and Height.
public double Width {
get { return pri_width; }
set { pri_width = value < 0 ? -value : value; }
}
public double Height {
get { return pri_height; }
set { pri_height = value < 0 ? -value : value; }
}
C# TIFF: C#.NET Code to Merge and Append TIFF Files
string[] tifFiles = new string[] { @"C:\demo1.tif", @"C:\demo2.tif" }; // Merge these Tiff files to a single Tiff file and save it to output.tif.
c# pdf merge; build pdf from multiple files
C# Word - Merge Word Documents in C#.NET
File: Merge Word Files. |. Home ›› XDoc.Word ›› C# Word: Merge Word Files. Combine and Merge Multiple Word Files into One Using C#.
pdf mail merge; add pdf together one file
P
A
R
T
I
Chapter 11: Inheritance 
307
P
A
R
T
I
P
A
R
T
I
public string name { get; set; }
public void ShowDim() {
Console.WriteLine("Width and height are " +
Width + " and " + Height);
}
public virtual double Area() {
Console.WriteLine("Area() must be overridden");
return 0.0;
}
}
// A derived class of TwoDShape for triangles.
class Triangle : TwoDShape {
string Style;
// A default constructor.
public Triangle() {
Style = "null";
}
// Constructor for Triangle.
public Triangle(string s, double w, double h) :
base(w, h, "triangle") {
Style = s;
}
// Construct an isosceles triangle.
public Triangle(double x) : base(x, "triangle") {
Style = "isosceles";
}
// Construct a copy of a Triangle object.
public Triangle(Triangle ob) : base(ob) {
Style = ob.Style;
}
// Override Area() for Triangle.
public override double Area() {
return Width * Height / 2;
}
// Display a triangle's style.
public void ShowStyle() {
Console.WriteLine("Triangle is " + Style);
}
}
// A derived class of TwoDShape for rectangles.
class Rectangle : TwoDShape {
// Constructor for Rectangle.
public Rectangle(double w, double h) :
base(w, h, "rectangle"){ }
C# PowerPoint - Merge PowerPoint Documents in C#.NET
File: Merge PowerPoint Files. |. Home ›› XDoc.PowerPoint ›› C# PowerPoint: Merge PowerPoint Files. C# DLLs: Merge PowerPoint Files.
break pdf file into multiple files; c# merge pdf files
Online Convert PDF to HTML5 files. Best free online PDF html
We try to make it as easy as possible to convert your doc files to PDF. All your PDF and HTML files will be permanently erased from our servers after one hour.
append pdf; break pdf into multiple files
308
Part I: The C# Language
// Construct a square.
public Rectangle(double x) :
base(x, "rectangle") { }
// Construct a copy of a Rectangle object.
public Rectangle(Rectangle ob) : base(ob) { }
// Return true if the rectangle is square.
public bool IsSquare() {
if(Width == Height) return true;
return false;
}
// Override Area() for Rectangle.
public override double Area() {
return Width * Height;
}
}
class DynShapes {
static void Main() {
TwoDShape[] shapes = new TwoDShape[5];
shapes[0] = new Triangle("right", 8.0, 12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10, 4);
shapes[3] = new Triangle(7.0);
shapes[4] = new TwoDShape(10, 20, "generic");
for(int i=0; i < shapes.Length; i++) {
Console.WriteLine("object is " + shapes[i].name);
Console.WriteLine("Area is " + shapes[i].Area());
Console.WriteLine();
}
}
}
The output from the program is shown here:
object is triangle
Area is 48
object is rectangle
Area is 100
object is rectangle
Area is 40
object is triangle
Area is 24.5
object is generic
Area() must be overridden
Area is 0
C# PDF File Split Library: Split, seperate PDF into multiple files
Also able to combine generated split PDF document files with other PDF files to form a new PDF file. Split PDF Document into Multiple PDF Files in C#.
break a pdf into multiple files; acrobat merge pdf files
VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
' Convert PDF file to HTML5 files DocumentConverter.ConvertToHtml5("..\1.pdf", "..output\", RelativeType.SVG). Copyright © <2000-2016> by <RasterEdge.com>.
attach pdf to mail merge; asp.net merge pdf files
P
A
R
T
I
Chapter 11: Inheritance 
309
P
A
R
T
I
P
A
R
T
I
Let’s examine this program closely. First, as explained, Area( ) is declared as virtual in 
theTwoDShape class and is overridden by Triangle and Rectangle. Inside TwoDShape,
Area( )
must be overridden by a derived class. Each override of Area( ) supplies an implementation 
e to 
implement an ellipse class, for example, then Area( ) would need to compute the area of an 
ellipse.
There is one other important feature in the preceding program. Notice in Main( ) that 
shapes is declared as an array of TwoDShape objects. However, the elements of this array 
are assigned Triangle,Rectangle, and TwoDShape references. This is valid because a base 
class reference can refer to a derived class object. The program then cycles through the array, 
displaying information about each object. Although quite simple, this illustrates the power 
of both inheritance and method overriding. The type of object stored in a base class reference 
variable is determined at runtime and acted on accordingly. If an object is derived from 
TwoDShape, then its area can be obtained by calling Area( ). The interface to this operation 
is the same no matter what type of shape is being used.
Using Abstract Classes
Sometimes you will want to create a base class that defines only a generalized form that will 
be shar
Such a class determines the nature of the methods that the derived classes must implement, 
but does not, itself, provide an implementation of one or more of these methods. One way 
this situation can occur is when a base class is unable to create a meaningful implementation 
for a method. This is the case with the version of TwoDShape used in the preceding example. 
The definition of Area( ) is simply a placeholder. It will not compute and display the area of 
any type of object.
You will see as you create your own class libraries that it is not uncommon for a method 
to have no meaningful definition in the context of its base class. You can handle this situation 
two ways. One way, as shown in the previous example, is to simply have it report a warning 
message. Although this approach can be useful in certain situations—such as debugging—it 
is not usually appropriate. You may have methods that must be overridden by the derived 
class in order for the derived class to have any meaning. Consider the class Triangle. It is 
incomplete if Area( ) is not defined. In such a case, you want some way to ensure that a 
derived class does, indeed, override all necessary methods. C#’s solution to this problem 
is the abstract method.
An abstract method is created by specifying theabstract type modifier. An abstract 
method contains no body and is, therefore, not implemented by the base class. Thus, a 
As you can probably guess, an abstract method is automatically virtual, and there is no 
need to use the virtual modifier. In fact, it is an error to use virtual and abstract together.
To declare an abstract method, use this general form:
abstracttypename(parameter-list);
As you can see, no method body is present. The abstract modifier can be used only on 
instance methods. It cannot be applied to static methods. Properties and indexers can also 
be abstract.
310
Part I: The C# Language
A class that contains one or more abstract methods must also be declared as abstract by 
preceding its class declaration with the abstract specifier. Since an abstract class does not 
define a complete implementation, there can be no objects of an abstract class. Thus, attempting 
to create an object of an abstract class by using new will result in a compile-time error.
abstract. Thus, the abstract attribute is inherited until such time as a complete implementation 
is achieved.
Using an abstract class, you can improve the TwoDShape class. Since there is no meaningful 
concept of area for an undefined two-dimensional figure, the following version of the preceding 
program declares Area( ) as abstract inside TwoDShape and TwoDShape as abstract. This, 
of course, means that all classes derived from TwoDShape must override Area( ).
// Create an abstract class.
using System;
abstract class TwoDShape {
double pri_width;
double pri_height;
// A default constructor.
public TwoDShape() {
Width = Height = 0.0;
name = "null";
}
// Parameterized constructor.
public TwoDShape(double w, double h, string n) {
Width = w;
Height = h;
name = n;
}
// Construct object with equal width and height.
public TwoDShape(double x, string n) {
Width = Height = x;
name = n;
}
// Construct a copy of a TwoDShape object.
public TwoDShape(TwoDShape ob) {
Width = ob.Width;
Height = ob.Height;
name = ob.name;
}
// Properties for Width and Height.
public double Width {
get { return pri_width; }
set { pri_width = value < 0 ? -value : value; }
}
P
A
R
T
I
Chapter 11: Inheritance 
311
P
A
R
T
I
P
A
R
T
I
public double Height {
get { return pri_height; }
set { pri_height = value < 0 ? -value : value; }
}
public string name { get; set; }
public void ShowDim() {
Console.WriteLine("Width and height are " +
Width + " and " + Height);
}
// Now, Area() is abstract.
public abstract double Area();
}
// A derived class of TwoDShape for triangles.
class Triangle : TwoDShape {
string Style;
// A default constructor.
public Triangle() {
Style = "null";
}
// Constructor for Triangle.
public Triangle(string s, double w, double h) :
base(w, h, "triangle") {
Style = s;
}
// Construct an isosceles triangle.
public Triangle(double x) : base(x, "triangle") {
Style = "isosceles";
}
// Construct a copy of a Triangle object.
public Triangle(Triangle ob) : base(ob) {
Style = ob.Style;
}
// Override Area() for Triangle.
public override double Area() {
return Width * Height / 2;
}
// Display a triangle's style.
public void ShowStyle() {
Console.WriteLine("Triangle is " + Style);
}
}
// A derived class of TwoDShape for rectangles.
class Rectangle : TwoDShape {
312
Part I: The C# Language
// Constructor for Rectangle.
public Rectangle(double w, double h) :
base(w, h, "rectangle"){ }
// Construct a square.
public Rectangle(double x) :
base(x, "rectangle") { }
// Construct a copy of a Rectangle object.
public Rectangle(Rectangle ob) : base(ob) { }
// Return true if the rectangle is square.
public bool IsSquare() {
if(Width == Height) return true;
return false;
}
// Override Area() for Rectangle.
public override double Area() {
return Width * Height;
}
}
class AbsShape {
static void Main() {
TwoDShape[] shapes = new TwoDShape[4];
shapes[0] = new Triangle("right", 8.0, 12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10, 4);
shapes[3] = new Triangle(7.0);
for(int i=0; i < shapes.Length; i++) {
Console.WriteLine("object is " + shapes[i].name);
Console.WriteLine("Area is " + shapes[i].Area());
Console.WriteLine();
}
}
}
As the program illustrates, all derived classes must override Area( ) (or also be declared 
abstract). To prove this to yourself, try creating a derived class that does not override Area( ).
You will receive a compile-time error. Of course, it is still possible to create an object reference 
of type TwoDShape, which the program does. However, it is no longer possible to declare 
objects of type TwoDShape. Because of this, in Main( ) the shapes array has been shortened 
to 4, and a generic TwoDShape object is no longer created.
One other point: Notice that TwoDShape still includes the ShowDim( ) method and 
that it is not modified by abstract. It is perfectly acceptable—indeed, quite common—for an 
abstract class to contain concrete methods that a derived class is free to use as-is. Only those 
methods declared as abstract must be overridden by derived classes.
P
A
R
T
I
Chapter 11: Inheritance 
313
P
A
R
T
I
P
A
R
T
I
Using sealed to Prevent Inheritance
As powerful and useful as inheritance is, sometimes you will want to prevent it. For 
specialized hardware device, such as a medical monitor. In this case, you don’t want users 
device incorrectly. Whatever the reason, in C# it is easy to prevent a class from being 
inherited by using the keyword sealed.
To prevent a class from being inherited, precede its declaration with sealed. As you 
might expect, it is illegal to declare a class as both abstract and sealed because an abstract 
class is incomplete by itself and relies upon its derived classes to provide complete 
implementations.
Here is an example of a sealed class:
sealed class A {
// ...
}
// The following class is illegal.
class B : A { // ERROR! Can't derive from class A
// ...
}
As the comments imply, it is illegal for B to inherit A because A is declared as sealed.
One other point: sealed can also be used on virtual methods to prevent further 
overrrides. For example, assume a base class called B and a derived class called D. A 
method declared virtual in B can be declared sealed by D. This would prevent any class 
that inherits D fr
class B {
public virtual void MyMethod() { /* ... */ }
}
class D : B {
// This seals MyMethod() and prevents further overrides.
sealed public override void MyMethod() { /* ... */ }
}
class X : D {
// Error! MyMethod() is sealed!
public override void MyMethod() { /* ... */ }
}
BecauseMyMethod( ) is sealed by D, it can’t be overridden by X.
The object Class
C# defines one special class called object that is an implicit base class of all other classes and 
for all other types (including the value types). In other words, all other types are derived 
from object. This means that a reference variable of type object can refer to an object of any 
Documents you may be interested
Documents you may be interested