PDA

View Full Version : مفهوم base در object orinted



vb8334
چهارشنبه 04 اردیبهشت 1392, 19:40 عصر
با سلام به تمامی دوستان

دوستان من تو بعضی کدها می بینم از ()base: و .base استفاده میکنن این ها چکاری انجام میدن

من یه نمونه کد گذاشتم میشه توضیح بدین base توی این کدها وظیفه چکاری رو داره؟

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Shapes;
using System.Windows.Media;
using System.Windows;

namespace WpfApplication8
{
abstract class Shape
{
public Shape(Canvas canvas)
{
_canvas = canvas;
}

public virtual void Draw()
{
double left = _canvas.ActualWidth * _rand.NextDouble();
double top = _canvas.ActualHeight * _rand.NextDouble();
_element.SetValue(Canvas.LeftProperty, left);
_element.SetValue(Canvas.TopProperty, top);
_canvas.Children.Add(_element);
}

private Canvas _canvas;
protected System.Windows.Shapes.Shape _element;
static Random _rand = new Random();
}

class Circle : Shape
{
public Circle(Canvas canvas)
:base(canvas)
{
Ellipse ellipse = new Ellipse();
ellipse.Width = 10;
ellipse.Height = 10;
ellipse.Fill = new SolidColorBrush(Colors.Green);
ellipse.Stroke = new SolidColorBrush(Colors.Black);
_element = ellipse;
}

public override void Draw()
{
_element.Fill = new SolidColorBrush(Colors.Red);
base.Draw();
}

}

class Square : Shape
{
public Square(Canvas canvas)
:base(canvas)
{
Rectangle rect = new Rectangle();
rect.Width = 10;
rect.Height = 10;
rect.Fill = new SolidColorBrush(Colors.Green);
rect.Stroke = new SolidColorBrush(Colors.Black);
_element = rect;
}
}
}


ممنون

tooraj_azizi_1035
چهارشنبه 04 اردیبهشت 1392, 20:51 عصر
سلام
کلمه کلیدی base برای دستیابی به اعضای کلاس پایه یا مبنا در یک کلاس مشتق شده برای مقاصد زیر به کار می رود:


فراخوانی یک متد از کلاس پایه که توسط متدی دیگر Override شده است.
تعیین اینکه کدام سازنده از کلاس پایه باید در هنگام ساخت نمونه از روی کلاس مشتق شده فراخوانی شود.



base(canvas) در کد شما باعث می شود هنگام ساخت یک نمونه از روی کلاس Circle سازنده موجود در کلاس Shape با پارامتر canvas فراخوانی شود و بعد سازنده خود Circle فراخوانی شود.


دستیابی به کلاس Base تنها در یک سازنده، در یک متد نمونه مجاز است، استفاده از کلمه کلیدی base در کلاس استاتیک غیر مجاز است.
بیشتر:http://msdn.microsoft.com/en-us/library/hfw7t1ce%28v=vs.71%29.aspx