ضت ی هسؼ د دسیطیاى لی ه هستمین ایي هطلة دس بتاسگت دس لسوت لثل ا ذوی تا method آض ا ضذیذ. واىط س و روش ضذ پشس ی تؼشیف هجذد method سا method overriding هی اه ذ. دس base class واىط س و گفت ضذ method دس تا ولو یولیذی تؼشیف هیض د. گاهیو یه method دس هجذدا تؼشیف هیض د تایذ اص modifier استفاد و یذ گام وشدى یه هتذ تایذ اسن هتذ ت هثال صیش ت ج و یذ: return type پاساهتش ای آى سا هطاتك تا method ت یسیذ. using System; class Human public void SayHello(string name) Console.WriteLine("SayHello in base class"); class Man : Human public void SayHello(string name) Console.WriteLine("Hello " + name); class OverrideDemo static void Main() Man ob = new Man(); ob.sayhello("stefan"); هتذ دسوالس ت ص ست تؼشیف ضذ است یه پاساهتش داسد. دس والس Man و اص Human SayHello() اسثتشی وشد هتذ هشت ط ضذ است. واىط س و هیتی یذ ایي هتذ دس والس اص Man Human Page 1
استفاد وشد است. دلت و یذ و وشدى یه هتذ ضشسی یست دس ص ستیو هتذی سا modifier ى یذ آى سخ اص هتذ و دس base class ج د داسد اجشا خ ا ذ ضذ. ت هثال صیش ت ج و یذ: using System; class A public void SayHello() Console.WriteLine("SayHello in base class"); class B : A public void SayHello() Console.WriteLine("SayHello in B"); class C : A // this class doesn't SayHello() class OverrideDemo static void Main() A a = new A(); B b = new B(); C c = new C(); a.sayhello(); b.sayhello(); c.sayhello(); خشجی: c SayHello() SayHello() دس ایيجا والس C هتذ سا ویو ذ ت اتشایي صها یو هتذ اص طشیك ضیء فشاخ ا ی هیض د هتذ SayHello() دس والس A اجشا خ ا ذ ضذ. Page 2
هی method گاهیو اص سلسل هشاتة اسثتشی استفاد هیو یذ اگش یه ى ذ سا ت طشف اتتذای ص جیش ی اسثتشی حشوت و یذ الیي ت هثال صیش ت ج و یذ: آى هتذ و دیذ ض د اجشا خ ا ذ ضذ. خشجی: using System; class A public void SayHello() Console.WriteLine("SayHello in base class"); class B : A public void SayHello() Console.WriteLine("SayHello in B"); class C : B // this class doesn't SayHello() class D : C // this class doesn't SayHello() class OverrideDemo static void Main() D d = new D(); d.sayhello(); واىط س و دس هثال تاال هیتی یذ والس D اص والس C اص C والس B B اص A اسثتشی وشد است. والس D C هتذ سا SayHello() ىشد ا ذ اها والس ایي هتذ سا وشد است. ت اتشایي گاهی و اص طشیك ضیء B والس D ایي هتذ سا صذا هیص یذ دس ص جیش ی اسثتشی الیي والسی و هتذ SayHello() سا فشاخ ا ی وشد است والس B است. ت اتشایي واىط س و دس خشجی هیتی یذ سخ ی ضذ ی ایي هتذ ه ج د دس والس اجشا خ ا ذ B Page 3
indexers properties ضذ. لاتل روش است و یض هیت ا ذ تا استفاد اص ت ویي ضىل ه سد استفاد لشاس گیش ذ. علت استفاده از متدهای شده چیست هتذ ای ضذ ت سیضاسج اجاص هید ذ تا اص یژگی runtime polymorphism ت ش تثشد. Polymorphism ت ا ایی ساخت هتذ ایی است و تا ت ج ت ه لؼیت هیت ا ذ اجشای هتفاتی داضت تاض ذ. تشای هثال ضوا هیت ا ذ ن ت هاضیي ن ت سگ غزا تذ یذ اها خ ب هیدا یذ و هؼ ای غزا دادى ت ایيد واهال هتفات است. Polymorphism ت ایي دلیل تشای تش اه یسی ضیگشا ا ویت داسد و ت یه والس ولی اجاص هید ذ هتذ ایی داضت تاضذ و دس و ی والس ای هطتك ضذ اص آى والس ست ذ. هطتشن ایي دسحالی است و ت ا ایي اجاص سا هید ذ تا شط س و هیخ ا ذ آى هتذ ا سا اجشا و ذ دسص ست یاص ح ی اجشای آى هتذ ا سا تغییش د ذ. هتذ ای one interface, multiple methods polymorphism ضذ سش دیگشی ج ث اص ایي اجشای تشای و هیگ یذ ست ذ. ت هثال صیش ت ج و یذ: // Use 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; Page 4
// 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; public string name get; set; public void ShowDim() Console.WriteLine("Width and height are " + Width + " and " + Height); public double Area() Console.WriteLine("Area() must be overridden"); return 0.0; // A 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; Page 5
// 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 double Area() return Width * Height / 2; // Display a triangle's style. public void ShowStyle() Console.WriteLine("Triangle is " + Style); // A of TwoDShape for rectangles. class Rectangle : TwoDShape // 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 double Area() return Width * Height; class DynShapes static void Main() Page 6
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(); خشجی: دس تش اه ی تاال اتتذا Area() ت ص ست دس والس TwoDShape تؼشیف ضذ سپس ت سط والس ای Triangle یض ضذ است. دس TwoDShape هیتی یذ و Area() فمط ت ص ست تؼشیف ضذ است Rectangle Area() ت ا واسی و ا جام هید ذ ایي است و اطالع هید ذ ایي هتذ تایذ ش ض د. اص هتذ تایذ تستگی ت ضىل ضیءای داضت تاضذ و طاى د ذ ی آى است. ت ػ اى هثال اگش ضىل ه سد ظش هستطیل است ح ی هحاسث ی هساحت آى هت اسة تا هستطیل خ ا ذ ت د اگش ضىل ه سد ظش هثلج تاضذ ح ی هحاسث ی هساحت آى یض هت اسة تا هثلج است. ه ن دیگش ىت ی تش اه ی تاال دسى هتذ Main() است. واىط س و هیتی یذ Triangle reference آسای ای اص اضیای TwoDShape است اها ػ اصشی و دس ایي آسای لشاس دادین ای shapes base class ست ذ. TwoDShape واىط س و لثال روش ضذ ایي ه سد ت ایي دلیل صحیح است و Rectangle Page 7
reference هیت ا ذ ت object سج ع و ذ. ایي تش اه سپس ت سط یه حلم اطالػات ػ اصش ه ج د دس آسای سا وایص هید ذ. استفاده از کالسهای Abstract گا ی لصذ داسیذ base class یه تساصیذ و ت ا یه فشم ولی سا هطخص هیو ذ آى سا تا توام والس ای هطتك جضئیات ضذ ت اضتشان هیگزاسد اجاص هید ذ و خ د ا تذ ایي فشم ولی سا تىویل و ذ. ت ػ اى هثال ایي چ یي والسی ها یت یه هتذ سا هطخص هیو ذ ایي هتذ سا تایذ ا و ذ اها خ د base class دیگش یاصی ذاسد و تشای ایي هتذ یه اجشای پیصفشض داضت تاضذ. ایي حالت هوىي است صها ی derived سخ د ذ و base class ت ا ذ یه اجشای تاهؼ ی تشای هتذ ه سد ظش داضت تاضذ اص ایيس اجشا سا تش ػ ذ ی class ا هیگزاسد. ها ذ هثال لثل و هتذ Area() دس والس TwoDShape یچگ هحاسثاتی سا ا جام ویداد. دس چ یي ه الؼی هیت ا یذ ها ذ هثال لثل ت سادگی یه پیغام طذاس دسى هتذ لشاس د یذ اها ایي سش چ ذاى ه اسة یست base class هوىي است دس ضشایط خاصی هثل debug وشدى ه اسة تاضذ. گا ی هوىي است هتذ ایی دس داضت تاضیذ و ا حتوا تایذ آى ا سا اجشا و ذ دس چ یي ضشایطی تایذ اص استفاد و یذ. base class modifier یه هتذ تا ساخت هیض د. تذ ذاسد اص ایيس دسى اجشا خ ا ذ ضذ. ا حتوا تایذ ایي سا یه و ذ. ت ص ست ات هاتیه فشم ولی یض است دس الغ ویت ا یذ اص ت ضىل صیش است: تا ن دس یه تؼشیف استفاد و یذ. type name(parameter-list); واىط س و هیتی یذ دس یاص ذاسیذ. تذ ت دلت و یذ و modifier سا ویت ا یذ تشای هتذ ای static استفاد و یذ. indexers properties یض هیت ا ذ تاض ذ. Page 8
والسی و ضاهل یه یا تیطتش اص یه هتذ تاضذ تایذ ت ص ست تؼشیف ض د. تشای تؼشیف یه والس ت ص ست وافی است و لثل اص ولو ی ولیذی اص استفاد و یذ. modifier اص آىجا و class ویت ا ذ ت ط س واهل اجشا ض د )ت دلیل ج د هتذ ای class اص ضیء تساصیذ. و تذ ذاس ذ( ت ویي دلیل ویت ا یذ class گاهیو یه اص یه اسثتشی هیو ذ تایذ توام هتذ ای دس base class سا class و ذ دس غیش ایيص ست یض تایذ ت ص ست تؼشیف ض د. ت هثال صیش ت ج و یذ: using System; class TwoDShape double pri_width; double pri_height; // Parameterized constructor. public TwoDShape(double w, double h, string n) Width = w; Height = h; name = n; // 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 string name get; set; // Now, Area() is. public double Area(); // A of TwoDShape for triangles. class Triangle : TwoDShape string Style; // Constructor for Triangle. public Triangle(string s, double w, double h) Page 9
: base(w, h, "triangle") Style = s; // Override Area() for Triangle. public double Area() return Width * Height / 2; // A of TwoDShape for rectangles. class Rectangle : TwoDShape // Constructor for Rectangle. public Rectangle(double w, double h) : base(w, h, "rectangle") // Override Area() for Rectangle. public double Area() return Width * Height; class AbsShape static void Main() Triangle triangle = new Triangle("right", 8.0, 12.0); Rectangle rectangle = new Rectangle(10, 4); Console.WriteLine("Triangle Area: " + triangle.area()); Console.WriteLine("Rectangle Area: " + rectangle.area()); Area() واىط س و تش اه طاى هید ذ و ی ا تایستی سا و ذ )یا ای ى خ دضاى تایذ یست ذ class تاض ذ(. ىت ی دیگش ایي است و یه هیت ا ذ هتذ ایی داضت تاضذ و ا هیت ا ذ دس ص ست یاص آى ا سا و ذ دسحالی و یچ اجثاسی دس واس یست. ولی حم ق هادی هؼ ی تشای بسایت بتاسگت هحف ظ است. استفاد اص ایي هطلة دس سایش بسایت ا طشیات چاپی ت ا تا روش دسج لی ه ه ثغ هجاص است. Page 10