PDA

View Full Version : حرفه ای: ارث بري ناقص از كلاس مبنا



rezamahdizadeh
یک شنبه 02 تیر 1392, 12:20 عصر
من مي خواهم كلاسي جديد از كلاس مبنا ايجاد كنم كه بعضي خصوصيات آن را به ارث ببرم. آيا امكان پذير است؟ مثلا در كلاس base در قسمت public و published يك سري متدها و پروپرتي ها را داشته باشم و روي بعضي متدها overload كنم.

یوسف زالی
یک شنبه 02 تیر 1392, 13:31 عصر
سلام.
منظور از ناقص چیه؟
شما نمی تونید اجزا رو کاهش میدان دید بدید.

rezamahdizadeh
دوشنبه 03 تیر 1392, 15:52 عصر
مثلا یک کلاسی بنام TDer از کلاس TDBNavigator مشتق کنیم که ویژگی DataSource نداشته باشد و بجای کدهای رویداد Click کلاس TDBNavigator کدهای دیگری بنویسیم

یوسف زالی
دوشنبه 03 تیر 1392, 20:12 عصر
نمی تونید ویژگی یک کلاس رو ازش بگیرید. باید اون قدر در درخت ارث بری بالا برید تا برسید به کنترل یا کامپوننتی که اون ویژگی رو در اختیار قرار نمی ده.

BORHAN TEC
دوشنبه 03 تیر 1392, 20:34 عصر
سلام
آقا یوسف در این خصوص توضیحات کاملی رو ارائه داد. اگر شما می خواهید که بتوانید در هنگام کد نویسی یکسری متدها و پروپرتی رو مخفی کنید تنها راهی که به نظر من می رسد استفاده از Casting است.
موفق باشید...

یوسف زالی
دوشنبه 03 تیر 1392, 20:56 عصر
شاهین جان منظورت از cast چیه؟

راستی یک راه که الان به ذهنم رسید اینه که یک کلاس بگیرید و در اون یک جز Private از کامپوننتی که می خواهید بسازید و هر چیزی که می خواهید رو از اون بگیرید و در اختیار برنامه نویس قرار بدید.

BORHAN TEC
دوشنبه 03 تیر 1392, 23:27 عصر
شاهین جان منظورت از cast چیه؟
خودت میدونی. قالب ریزی نوع!
مثال:
type
TBase = class(TObject)
private
FA: Integer;
procedure SetA(const Value: Integer);
public
property A: Integer read FA write SetA;
end;

TDrived = class(TBase)
private
FB: Integer;
FC: string;
procedure SetB(const Value: Integer);
procedure SetC(const Value: string);
public
property B: Integer read FB write SetB;
property C: string read FC write SetC;
end;

// ...

var
Drived: TDrived;

begin
Drived := TDrived.Create;
// Where is It B? Where is It C? (O_o)
TBase(Drived).A; // Casting
end.

راستی یک راه که الان به ذهنم رسید اینه که یک کلاس بگیرید و در اون یک جز Private از کامپوننتی که می خواهید بسازید و هر چیزی که می خواهید رو از اون بگیرید و در اختیار برنامه نویس قرار بدید.
کار جالبی نیست. چون مثلاً ما می خواهیم فقط پروپرتی و یا متد X را مخفی کنیم. خوب در این حالت اگه بعداً به کلاس پایه یکسری متد و ... اضافه بشه چی؟ اونوقت باید کلاسی که خودمون نوشتیم رو هم تغییر بدیم. در هر صورت دلفی امکان مخفی کردن را به این شکل نمی دهد ولی C++‎ این قابلیت را دارد. به نظر من کامل ترین زبان شی گرا C++ است و نه زبانهایی مثل Java و بقیه زبانها. :چشمک: