274
Part I: The C# Language
// Demonstrate the index-range array.
class RangeArrayDemo {
static void Main() {
RangeArray ra = new RangeArray(-5, 5);
RangeArray ra2 = new RangeArray(1, 10);
RangeArray ra3 = new RangeArray(-20, -12);
// Demonstrate ra.
Console.WriteLine("Length of ra: " + ra.Length);
for(int i = -5; i <= 5; i++)
ra[i] = i;
Console.Write("Contents of ra: ");
for(int i = -5; i <= 5; i++)
Console.Write(ra[i] + " ");
Console.WriteLine("\n");
// Demonstrate ra2.
Console.WriteLine("Length of ra2: " + ra2.Length);
for(int i = 1; i <= 10; i++)
ra2[i] = i;
Console.Write("Contents of ra2: ");
for(int i = 1; i <= 10; i++)
Console.Write(ra2[i] + " ");
Console.WriteLine("\n");
// Demonstrate ra3.
Console.WriteLine("Length of ra3: " + ra3.Length);
for(int i = -20; i <= -12; i++)
ra3[i] = i;
Console.Write("Contents of ra3: ");
for(int i = -20; i <= -12; i++)
Console.Write(ra3[i] + " ");
Console.WriteLine("\n");
}
}
The output from the program is shown here:
Length of ra: 11
Contents of ra: -5 -4 -3 -2 -1 0 1 2 3 4 5
Length of ra2: 10
Contents of ra2: 1 2 3 4 5 6 7 8 9 10
Length of ra3: 9
Contents of ra3: -20 -19 -18 -17 -16 -15 -14 -13 -12
Pdf merger - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
append pdf; how to combine pdf files
Pdf merger - 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
acrobat merge pdf; combine pdf files
P
A
R
T
I
Chapter 10: Indexers and Properties 
275
P
A
R
T
I
P
A
R
T
I
As the output verifies, objects of type RangeArray can be indexed in ways other than 
starting at zero. Let’s look more closely at how RangeArray is implemented.
RangeArray begins by defining the following private instance variables:
// Private data.
int[] a; // reference to underlying array
int lowerBound; // smallest index
int upperBound; // largest index
The underlying array is referred to by a. This array is allocated by the RangeArray
constructor. The index of the lower bound of the array is stored in lowerBound, and the 
index of the upper bound is stored in upperBound.
Next, the auto-implemented, read-only properties Length and Error are declared:
// An auto-implemented, read-only Length property.
public int Length { get; private set; }
// An auto-implemented, read-only Error property.
public bool Error { get; private set; }
Notice that for both properties, the set accessor is private. As explained earlier in this 
chapter, this results in what is effectively a read-only, auto-implemented property.
TheRangeArray constructor is shown here:
// Construct array given its size.
public RangeArray(int low, int high) {
high++;
if(high <= low) {
Console.WriteLine("Invalid Indices");
high = 1; // create a minimal array for safety
low = 0;
}
a = new int[high - low];
Length = high - low;
lowerBound = low;
upperBound = --high;
}
ARangeArray is constructed by passing the lower bound index in low and the upper 
bound index in high. The value of high is then incremented because the indexes specified 
are inclusive. Next, a check is made to ensure that the upper index is greater than the lower 
index. If not, an error is reported and a one-element array is created. Next, storage for the 
array is allocated and assigned to a. Then the Length property is set equal to the number of 
elements in the array. Finally, lowerBound and upperBound are set.
Next,RangeArray implements its indexer, as shown here:
// This is the indexer for RangeArray.
public int this[int index] {
// This is the get accessor.
get {
if(ok(index)) {
C# PDF: C#.NET PDF Document Merging & Splitting Control SDK
In order to help you have a quicker and better understanding of this C#.NET PDF merger & splitter control SDK, we will illustrate the PDF document merging and
reader combine pdf; reader combine pdf pages
C# Word: .NET Merger & Splitter Control to Merge & Split MS Word
to form a larger Word file or how to divide source MS Word file into several smaller documents, RasterEdge designs this C#.NET MS Word merger & splitter
c# merge pdf pages; pdf mail merge
276
Part I: The C# Language
Error = false;
return a[index - lowerBound];
} else {
Error = true;
return 0;
}
}
// This is the set accessor.
set {
if(ok(index)) {
a[index - lowerBound] = value;
Error = false;
}
else Error = true;
}
}
This indexer is similar to the one used by FailSoftArray, with one important exception. 
Notice the expression that indexes a. It is
index - lowerBound
This expression transforms the index passed in index into a zero-based index suitable for 
use on a. This expression works whether lowerBound is positive, negative, or zero.
Theok( ) method is shown here:
// Return true if index is within bounds.
private bool ok(int index) {
if(index >= lowerBound & index <= upperBound) return true;
return false;
}
It is similar to the one used by FailSoftArray except that the range is checked by testing it 
against the values in lowerBound and upperBound.
RangeArray illustrates just one kind of custom array that you can create through the 
use of indexers and properties. There are, of course, several others. For example, you can 
cr
arrays. You might want to try creating one of these types of arrays as an exercise.
VB.NET TIFF: .NET TIFF Merger SDK to Combine TIFF Files
A 2: Yes, this VB.NET TIFF merger SDK allows developers to achieve We are dedicated to provide powerful & profession imaging controls, PDF document, image to
batch combine pdf; pdf combine files online
VB.NET Word: Merge Multiple Word Files & Split Word Document
Word processing and editing controls, this VB.NET Word merger and splitter are dedicated to provide powerful & profession imaging controls, PDF document, image
pdf merger; break a pdf into multiple files
11
Inheritance
I
nheritance is one of the three foundational principles of object-oriented programming 
because it allows the creation of hierarchical classifications. Using inheritance, you can 
create a general class that defines traits common to a set of related items. This class can 
then be inherited by other, more specific classes, each adding those things that are unique 
to it.
In the language of C#, a class that is inherited is called a baseclass. The class that does 
the inheriting is called a derivedclass. Therefore, a derived class is a specialized version of a 
base class. It inherits all of the variables, methods, properties, and indexers defined by the 
base class and adds its own unique elements.
Inheritance Basics
This is done by specifying a base class when a derived class is declared. Let’s begin with 
an example. The following class called TwoDShape stores the width and height of a two-
dimensional object, such as a square, rectangle, triangle, and so on.
// A class for two-dimensional objects.
class TwoDShape {
public double Width;
public double Height;
public void ShowDim() {
Console.WriteLine("Width and height are " +
Width + " and " + Height);
}
}
TwoDShape
ogram uses 
TwoDShape to derive a class called Triangle. Pay close attention to the way that Triangle is 
declared.
277
CHAPTER
C# PowerPoint: C# Codes to Combine & Split PowerPoint Documents
of RasterEdge .NET Imaging SDK is some like PowerPoint file merger in its are dedicated to provide powerful & profession imaging controls, PDF document, tiff
asp.net merge pdf files; add pdf pages together
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
C# PDF Page Processing: Merge PDF Files - C#.NET PDF document merger APIs for combining two different PDF documents into one large PDF file.
pdf combine two pages into one; combine pdf online
278
Part I: The C# Language
// A simple class hierarchy.
using System;
// A class for two-dimensional objects.
class TwoDShape {
public double Width;
public double Height;
public void ShowDim() {
Console.WriteLine("Width and height are " +
Width + " and " + Height);
}
}
// Triangle is derived from TwoDShape.
class Triangle : TwoDShape {
public string Style; // style of triangle
// Return area of triangle.
public double Area() {
return Width * Height / 2;
}
// Display a triangle's style.
public void ShowStyle() {
Console.WriteLine("Triangle is " + Style);
}
}
class Shapes {
static void Main() {
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();
t1.Width = 4.0;
t1.Height = 4.0;
t1.Style = "isosceles";
t2.Width = 8.0;
t2.Height = 12.0;
t2.Style = "right";
Console.WriteLine("Info for t1: ");
t1.ShowStyle();
t1.ShowDim();
Console.WriteLine("Area is " + t1.Area());
Console.WriteLine();
Console.WriteLine("Info for t2: ");
t2.ShowStyle();
t2.ShowDim();
VB.NET TIFF: Merge and Split TIFF Documents with RasterEdge .NET
Besides TIFF document merger and splitter, RasterEdge still provides other market-leading to provide powerful & profession imaging controls, PDF document, tiff
c# combine pdf; add pdf together one file
VB.NET PowerPoint: Merge and Split PowerPoint Document(s) with PPT
here is what you are looking for - RasterEdge VB.NET PPT Document Merger and Splitter Note: If you want to see more PDF processing functions in VB.NET, please
pdf merge; reader create pdf multiple files
P
A
R
T
I
Chapter 11: Inheritance 
279
P
A
R
T
I
P
A
R
T
I
Console.WriteLine("Area is " + t2.Area());
}
}
The output from this program is shown here:
Info for t1:
Triangle is isosceles
Width and height are 4 and 4
Area is 8
Info for t2:
Triangle is right
Width and height are 8 and 12
Area is 48
TheTriangle class creates a specific type of TwoDShape, in this case, a triangle. The 
Triangle class includes all of TwoDShape and adds the field Style, the method Area( ), and 
the method ShowStyle( ). A description of the type of triangle is stored in Style;Area( )
computes and returns the area of the triangle; and ShowStyle( ) displays the triangle style.
Notice the syntax that Triangle uses to inherit TwoDShape:
class Triangle : TwoDShape {
This syntax can be generalized. Whenever one class inherits another, the base class name 
a class is remarkably simple and easy to use.
BecauseTriangle includes all of the members of its base class, TwoDShape, it can access 
Width and Height inside Area( ). Also, inside Main( ), objects t1 and t2 can refer to Width
andHeight directly, as if they were part of Triangle. Figure 11-1 depicts conceptually how 
TwoDShape is incorporated into Triangle.
Even though TwoDShape is a base for Triangle, it is also a completely independent, 
cannot be used by itself. For example, the following is perfectly valid:
TwoDShape shape = new TwoDShape();
shape.Width = 10;
shape.Height = 20;
shape.ShowDim();
Of course, an object of TwoDShape has no knowledge of or access to any classes derived 
from TwoDShape.
H
A
F
IGURE
11-1 A conceptual depiction of the Triangle class
280
Part I: The C# Language
The general form of a class declaration that inherits a base class is shown here:
classderived-class-name : base-class-name {
// body of class
}
You can specify only one base class for any derived class that you create. C# does not 
fers 
from C++, in which you can inherit multiple base classes. Be aware of this when converting 
C++ code to C#.) You can, however, create a hierarchy of inheritance in which a derived 
of itself, either directly or indirectly.) In all cases, a derived class inherits all of the members 
of its base class. This includes instance variables, methods, properties, and indexers.
A major advantage of inheritance is that once you have created a base class that defines 
the attributes common to a set of objects, it can be used to create any number of more 
specific derived classes. Each derived class can precisely tailor its own classification. For 
example, here is another class derived from TwoDShape that encapsulates rectangles:
// A derived class of TwoDShape for rectangles.
class Rectangle : TwoDShape {
// Return true if the rectangle is square.
public bool IsSquare() {
if(Width == Height) return true;
return false;
}
// Return area of the rectangle.
public double Area() {
return Width * Height;
}
}
TheRectangle class includes TwoDShape and adds the methods IsSquare( ), which 
determines if the rectangle is square, and Area( ), which computes the area of a rectangle.
Member Access and Inheritance
As explained in Chapter 8, members of a class are often declared private to prevent their 
unauthorized use or tampering. Inheriting a class doesnot overrule the private access 
r
it cannot access those members of the base class that are private. For example, if, as shown 
here, Width and Height are made private in TwoDShape, then Triangle will not be able to 
access them:
// Access to private members is not inherited.
// This example will not compile.
using System;
// A class for two-dimensional objects.
class TwoDShape {
P
A
R
T
I
Chapter 11: Inheritance 
281
P
A
R
T
I
P
A
R
T
I
double Width;  // now private
double Height; // now private
public void ShowDim() {
Console.WriteLine("Width and height are " +
Width + " and " + Height);
}
}
// Triangle is derived from TwoDShape.
class Triangle : TwoDShape {
public string Style; // style of triangle
// Return area of triangle.
public double Area() {
return Width * Height / 2; // Error, can't access private member
}
// Display a triangle's style.
public void ShowStyle() {
Console.WriteLine("Triangle is " + Style);
}
}
TheTriangle class will not compile because the use of Width and Height inside the 
Area( ) method is illegal. Since Width and Height are now private, they are accessible only 
R
EMEMBER
R
EMEMBER
A private class member will remain private to its class. It is not accessible to any code 
outside its class, including derived classes.
At first, you might think that it is a serious restriction that derived classes do not have 
access to the private members of base classes because it would prevent the use of private 
members in many situations. However, this is not true; C# provides various solutions. One 
is to use protected members, which is described in the next section. A second is to use public 
properties to provide access to private data.
As explained in the previous chapter, a property allows you to manage access to an 
instance variable. For example, you can enforce constraints on its values, or you can make 
the variable read-only. By making a property public, but declaring its underlying variable 
private, a derived class can still use the property, but it cannot directly access the underlying 
private variable.
Here is a rewrite of the TwoDShape class that makes Width and Height into properties. 
In the process, it ensures that the values of Width and Height will be positive. This would 
allow you, for example, to specify the Width and Height using the coordinates of the shape 
// Use public properties to set and get private members.
using System;
// A class for two-dimensional objects.
282
Part I: The C# Language
class TwoDShape {
double pri_width;  // now private
double pri_height; // now private
// 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; }
}
public void ShowDim() {
Console.WriteLine("Width and height are " +
Width + " and " + Height);
}
}
// A derived class of TwoDShape for triangles.
class Triangle : TwoDShape {
public string Style; // style of triangle
// Return area of triangle.
public double Area() {
return Width * Height / 2;
}
// Display a triangle's style.
public void ShowStyle() {
Console.WriteLine("Triangle is " + Style);
}
}
class Shapes2 {
static void Main() {
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();
t1.Width = 4.0;
t1.Height = 4.0;
t1.Style = "isosceles";
t2.Width = 8.0;
t2.Height = 12.0;
t2.Style = "right";
Console.WriteLine("Info for t1: ");
t1.ShowStyle();
t1.ShowDim();
Console.WriteLine("Area is " + t1.Area());
P
A
R
T
I
Chapter 11: Inheritance 
283
P
A
R
T
I
P
A
R
T
I
Console.WriteLine();
Console.WriteLine("Info for t2: ");
t2.ShowStyle();
t2.ShowDim();
Console.WriteLine("Area is " + t2.Area());
}
}
In this version, the properties Width and Height provide access to the private members, 
pri_width and pri_height, which actually store the values. Therefore, even though 
pri_width and pri_height are private to TwoDShape, their values can still be set and 
obtained through their corresponding public properties.
When referring to base and derived classes, sometimes the terms superclass and subclass
are used. These terms come from Java programming. What Java calls a superclass, C# calls 
a base class. What Java calls a subclass, C# calls a derived class. You will commonly hear 
the standard C# terms. C++ also uses the base-class/derived-class terminology.
Using Protected Access
it available to all other code, which may not be desirable. Fortunately, this implication is 
untrue because C# allows you to create a protectedmember. A protected member is public 
within a class hierarchy, but private outside that hierarchy.
A protected member is created by using the protected access modifier. When a member 
of a class is declared as protected, that member is, with one important exception, private. 
The exception occurs when a protected member is inherited. In this case, a protected member 
of the base class becomes a protected member of the derived class and is, therefore, accessible 
to the derived class. Therefore, by using protected, you can create class members that are 
Here is a simple example that uses protected:
// Demonstrate protected.
using System;
class B {
protected int i, j; // private to B, but accessible by D
public void Set(int a, int b) {
i = a;
j = b;
}
public void Show() {
Console.WriteLine(i + " " + j);
}
}
Documents you may be interested
Documents you may be interested