<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FClass%2FAbstract_Class</id>
		<title>Csharp/CSharp Tutorial/Class/Abstract Class - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FClass%2FAbstract_Class"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Abstract_Class&amp;action=history"/>
		<updated>2026-04-29T20:40:01Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Abstract_Class&amp;diff=5637&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Abstract_Class&amp;diff=5637&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Abstract_Class&amp;diff=5638&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/Abstract_Class&amp;diff=5638&amp;oldid=prev"/>
				<updated>2010-05-26T12:16:05Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==abstract class with three virtual methods==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;public abstract class MyOperations&lt;br /&gt;
{&lt;br /&gt;
    public virtual void Operation1() {&lt;br /&gt;
    }&lt;br /&gt;
    public virtual void Operation2() {&lt;br /&gt;
    }&lt;br /&gt;
    public virtual void Operation3() {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MyClass : MyOperations&lt;br /&gt;
{&lt;br /&gt;
    public override void Operation1() { }&lt;br /&gt;
    public override void Operation2() { }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public void DoWork( MyOperations ops ) {&lt;br /&gt;
        ops.Operation3();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create an abstract class.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
abstract class Shape {  &lt;br /&gt;
  double pri_width;  // private &lt;br /&gt;
  double pri_height; // private &lt;br /&gt;
  string pri_name;   // private &lt;br /&gt;
  &lt;br /&gt;
  public Shape() {  &lt;br /&gt;
    width = height = 0.0;  &lt;br /&gt;
    name = &amp;quot;null&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Shape(double w, double h, string n) {  &lt;br /&gt;
    width = w;  &lt;br /&gt;
    height = h;  &lt;br /&gt;
    name = n;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Shape(double x, string n) {  &lt;br /&gt;
    width = height = x;  &lt;br /&gt;
    name = n;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Shape(Shape ob) {  &lt;br /&gt;
    width = ob.width;  &lt;br /&gt;
    height = ob.height;  &lt;br /&gt;
    name = ob.name;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public double width { &lt;br /&gt;
    get { return pri_width; } &lt;br /&gt;
    set { pri_width = value; } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public double height { &lt;br /&gt;
    get { return pri_height; } &lt;br /&gt;
    set { pri_height = value; } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public string name { &lt;br /&gt;
    get { return pri_name; } &lt;br /&gt;
    set { pri_name = value; } &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  public void showDim() {  &lt;br /&gt;
    Console.WriteLine(&amp;quot;Width and height are &amp;quot; +  &lt;br /&gt;
                       width + &amp;quot; and &amp;quot; + height);  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Now, area() is abstract. &lt;br /&gt;
  public abstract double area(); &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class Triangle : Shape {  &lt;br /&gt;
  string style; // private &lt;br /&gt;
    &lt;br /&gt;
  public Triangle() {  &lt;br /&gt;
    style = &amp;quot;null&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Triangle(string s, double w, double h) : &lt;br /&gt;
    base(w, h, &amp;quot;triangle&amp;quot;) {  &lt;br /&gt;
      style = s;   &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Triangle(double x) : base(x, &amp;quot;triangle&amp;quot;) {  &lt;br /&gt;
    style = &amp;quot;isosceles&amp;quot;;   &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Triangle(Triangle ob) : base(ob) {  &lt;br /&gt;
    style = ob.style;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public override double area() {  &lt;br /&gt;
    return width * height / 2;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public void showStyle() {  &lt;br /&gt;
    Console.WriteLine(&amp;quot;Triangle is &amp;quot; + style);  &lt;br /&gt;
  }  &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class Rectangle : Shape {   &lt;br /&gt;
  public Rectangle(double w, double h) :  &lt;br /&gt;
    base(w, h, &amp;quot;rectangle&amp;quot;){ }  &lt;br /&gt;
  &lt;br /&gt;
  public Rectangle(double x) :  &lt;br /&gt;
    base(x, &amp;quot;rectangle&amp;quot;) { }  &lt;br /&gt;
  &lt;br /&gt;
  public Rectangle(Rectangle ob) : base(ob) { }  &lt;br /&gt;
  &lt;br /&gt;
  public bool isSquare() {   &lt;br /&gt;
    if(width == height) &lt;br /&gt;
       return true;   &lt;br /&gt;
    return false;   &lt;br /&gt;
  }   &lt;br /&gt;
     &lt;br /&gt;
  // Override area() for Rectangle. &lt;br /&gt;
  public override double area() {   &lt;br /&gt;
    return width * height;   &lt;br /&gt;
  }   &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class MainClass {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    Shape[] shapes = new Shape[4];  &lt;br /&gt;
  &lt;br /&gt;
    shapes[0] = new Triangle(&amp;quot;right&amp;quot;, 8.0, 12.0);  &lt;br /&gt;
    shapes[1] = new Rectangle(10);  &lt;br /&gt;
    shapes[2] = new Rectangle(10, 4);  &lt;br /&gt;
    shapes[3] = new Triangle(7.0);  &lt;br /&gt;
  &lt;br /&gt;
    for(int i=0; i &amp;lt; shapes.Length; i++) {  &lt;br /&gt;
      Console.WriteLine(&amp;quot;object is &amp;quot; + shapes[i].name);  &lt;br /&gt;
      Console.WriteLine(&amp;quot;Area is &amp;quot; + shapes[i].area());  &lt;br /&gt;
  &lt;br /&gt;
      Console.WriteLine();    &lt;br /&gt;
    }  &lt;br /&gt;
  }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;object is triangle&lt;br /&gt;
Area is 48&lt;br /&gt;
object is rectangle&lt;br /&gt;
Area is 100&lt;br /&gt;
object is rectangle&lt;br /&gt;
Area is 40&lt;br /&gt;
object is triangle&lt;br /&gt;
Area is 24.5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Define abstract class and abstract method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
abstract class Employee&lt;br /&gt;
{&lt;br /&gt;
    public Employee(string name, float billingRate)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        this.billingRate = billingRate;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    virtual public float CalculateCharge(float hours)&lt;br /&gt;
    {&lt;br /&gt;
        return(hours * billingRate);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    abstract public string TypeName();&lt;br /&gt;
    &lt;br /&gt;
    private string name;&lt;br /&gt;
    protected float billingRate;&lt;br /&gt;
}&lt;br /&gt;
class Manager: Employee&lt;br /&gt;
{&lt;br /&gt;
    public Manager(string name, float billingRate) : base(name, billingRate)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    override public float CalculateCharge(float hours)&lt;br /&gt;
    {&lt;br /&gt;
        if (hours &amp;lt; 1.0F)&lt;br /&gt;
        hours = 1.0F;        // minimum charge.&lt;br /&gt;
        return(hours * billingRate);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // This override is required, or an error is generated.&lt;br /&gt;
    override public string TypeName()&lt;br /&gt;
    {&lt;br /&gt;
        return(&amp;quot;Manager&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Clerk: Employee&lt;br /&gt;
{&lt;br /&gt;
    public Clerk(string name, float billingRate) :&lt;br /&gt;
    base(name, billingRate)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    override public string TypeName()&lt;br /&gt;
    {&lt;br /&gt;
        return(&amp;quot;Clerk&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Test&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Employee[] earray = new Employee[2];&lt;br /&gt;
        earray[0] = new Manager(&amp;quot;A&amp;quot;, 40.0F);&lt;br /&gt;
        earray[1] = new Clerk(&amp;quot;C&amp;quot;, 45.0F);&lt;br /&gt;
        &lt;br /&gt;
        Console.WriteLine(&amp;quot;{0} charge = {1}&amp;quot;,&lt;br /&gt;
        earray[0].TypeName(),&lt;br /&gt;
        earray[0].CalculateCharge(2F));&lt;br /&gt;
        Console.WriteLine(&amp;quot;{0} charge = {1}&amp;quot;,&lt;br /&gt;
        earray[1].TypeName(),&lt;br /&gt;
        earray[1].CalculateCharge(0.75F));&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Manager charge = 80&lt;br /&gt;
Clerk charge = 33.75&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Override abstract method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  static void Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    B MyB = new C();&lt;br /&gt;
    MyB.Display();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
abstract class A&lt;br /&gt;
{&lt;br /&gt;
  public abstract void Display();&lt;br /&gt;
}&lt;br /&gt;
class B: A&lt;br /&gt;
{&lt;br /&gt;
  public override void Display()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Class B&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class C: B&lt;br /&gt;
{&lt;br /&gt;
  public override void Display()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Class C&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class D: C&lt;br /&gt;
{&lt;br /&gt;
  public override void Display()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Class D&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Class C&amp;quot;s Display Method&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Polymorphism and Virtual Functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public abstract class Clock {&lt;br /&gt;
    public abstract void Play();&lt;br /&gt;
}&lt;br /&gt;
public class RedClock: Clock {&lt;br /&gt;
    public override void Play() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;RedClock.Play()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class BlueClock: Clock{&lt;br /&gt;
    public override void Play() &lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;BlueClock.Play()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void CallPlay(Clock ms)&lt;br /&gt;
    {&lt;br /&gt;
        ms.Play();&lt;br /&gt;
    }&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Clock ms = new RedClock();&lt;br /&gt;
        CallPlay(ms);&lt;br /&gt;
        ms = new BlueClock();&lt;br /&gt;
        CallPlay(ms);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;RedClock.Play()&lt;br /&gt;
BlueClock.Play()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using Abstract Classes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;An abstract method is created by specifying the abstract type modifier.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;An abstract method contains no body.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;An abstract method is not implemented by the base class.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;An abstract method is automatically virtual.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;A derived class must override it.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;The abstract modifier cannot be applied to static methods.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Properties can also be abstract.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;A class containing abstract methods must be declared as abstract with the abstract specifier.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;There can be no objects of an abstract class.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;If a derived class doesn&amp;quot;t implement all of the abstract methods in the base class, then the derived class must also be specified as abstract.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To declare an abstract method, use this general form:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;abstract type name(parameter-list);&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>