PDA

View Full Version : تشخیص نوع متغیر



seven_7_sky
پنج شنبه 29 اسفند 1387, 12:58 عصر
با سلام .

آیا می شود نوع یک متغیر را که به یک تابع ارسال مشه رو تشخیص . این کار برای اشیا امکان دارد .

procedure Func( O1: TObject );
begin
if O1 is TEdit then

if O1 is TComboBox then

end

vcldeveloper
پنج شنبه 29 اسفند 1387, 13:06 عصر
نوع پارامتر را در زمان تعریف تابع مشخص می کنید، و قابل تغییر نیست، پس نیازی به تشخیص نوع پارامتر نیست. مثلا:


function (A: integer): string;

این تابع همیشه مقدار عدد صحیح میگیره، و شما نمی تونید فرضا بهش string یا عدد اعشاری، و غیره پاس کنید.

دو تا استثناء داره؛ یکی نوع Variant هست که خودش میتونه نوع های مختلفی داشته باشه، و میشه با دسترسی به ساختار Variant یا توابع کار با Variant مشخص کرد پارامتر Variant پاس داده شده دقیقا چه نوعی داره. یکی هم پارامترهای بدون نوع هست، که مقدار پارامتر بصورت یک pointer ارسال میشه، اطلاعی درباره اینکه در آن خانه حافظه چه نوع داده ایی نگهداری میشه در دسترس نیست. برای همین هم فقط در موارد خاص استفاده میشه.

seven_7_sky
پنج شنبه 29 اسفند 1387, 14:08 عصر
تشکر آقای علی کشاورز (http://barnamenevis.org/forum/member.php?u=4729) .


procedure TForm1.ShowBasicVariantType(varVar: Variant);
var
typeString : string;
basicType : Integer;

begin
// Get the Variant basic type :
// this means excluding array or indirection modifiers
basicType := VarType(varVar) and VarTypeMask;

// Set a string to match the type
case basicType of
varEmpty : typeString := 'varEmpty';
varNull : typeString := 'varNull';
varSmallInt : typeString := 'varSmallInt';
varInteger : typeString := 'varInteger';
varSingle : typeString := 'varSingle';
varDouble : typeString := 'varDouble';
varCurrency : typeString := 'varCurrency';
varDate : typeString := 'varDate';
varOleStr : typeString := 'varOleStr';
varDispatch : typeString := 'varDispatch';
varError : typeString := 'varError';
varBoolean : typeString := 'varBoolean';
varVariant : typeString := 'varVariant';
varUnknown : typeString := 'varUnknown';
varByte : typeString := 'varByte';
varWord : typeString := 'varWord';
varLongWord : typeString := 'varLongWord';
varInt64 : typeString := 'varInt64';
varStrArg : typeString := 'varStrArg';
varString : typeString := 'varString';
varAny : typeString := 'varAny';
varTypeMask : typeString := 'varTypeMask';
end;

// Show the Variant type
ShowMessage('Variant type = '+typeString);
end;