پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
نقل قول:
سلام
چرا عضو protected از یک کلاس ، فقط وقتی درون کلاس فرزند ، از همون کلاس فرزند شی بسازیم در دسترس هه؟ یعنی به چه دلیل وقتی از کلاس فرزند ، شی ای از کلاس پدر بسازیم ، اعضای protected تعریف شده از کلاس پدر در دسترس نیست؟
سلام سجاد جان،
اعضای protected مطابق برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ] در کلاس پایه و هم در کلاس وارث در دسترس هستش.
پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
نقل قول:
سلام سجاد جان،
اعضای protected مطابق
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ] در کلاس پایه و هم در کلاس وارث در دسترس هستش.
سلام
ممنون اوستا آرمین
اینو میدونم . سئوال مو دقیق تر بخونی ، متوجه سئوالم میشی :
به چه دلیل وقتی از درون کلاس فرزند ، شی ای از کلاس پدر بسازیم ، اعضای protected (غیر استاتیک) تعریف شده از کلاس پدر در دسترس نیست؟
پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
سلام
درباره ی نوع کلاس پدر و مقدار فرزند ، میخواستم ببینم تحلیلی که در زیر میکنم درست هست یا نه و اگه درست نیست ، ممنون میشم درست اش رو توضیح بدین (چون درک این مسئله برام توی کدنویسی مهم هست) .
در کد زیر :
کد:
FatherClass object = new ChildClass();
اشیاء هایی از نوع کلاس ، اشاره گری هستن به مقادیرشون (سمت راست) پس در کد بالا ، object اشاره گری هست به کلاس ChildClass . پس یعنی شی object ، به اعضای اونجایی رو که اشاره میکنه یعنی به اعضای کلاس ChildClass ، دسترسی داره منتها فقط به اعضایی از کلاس فرزند دسترسی داره که در کلاس پدر موجود باشه (تعریف شده باشه)
پس شی object به اعضای جدیدی که در کلاس فرزند تعریف شده ، دسترسی نداره
اگه متدی override شده باشه ، چون اعضای کلاس فرزند رو میبینه و override هم باعث باطل شدن متد در کلاس پدر میشه ، پس عضو override شده در کلاس فرزند اجرا میشه نه عضو virtual در کلاس فرزند
ولی با این تفاسیر ، نمیدونم چرا در شی object ، اگه member hiding اتفاق بیفته ، بجای اجرای عضو مخفی شده در کلاس فرزند ، عضو اصلی در کلاس پدر رو اجرا میکنه ؟؟!!
----------------------------------
یا اینکه این تحلیل درسته؟ (اما فکر کنم تحلیل بالا درست باشه) :
اینکه شی object در کد بالا ، اعضای پدر رو اجرا میکنه بجز حالت override رو که در کلاس پدر اجرا میکنه
کدوم درست هه؟ و اگه اولی درسته ، ممنون میشم جواب سئوال مو بدین و اگه حس میکنین نکته ای رو نمیدونم ، ممنون میشم بگین
پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
نقل قول:
سلام
درباره ی نوع کلاس پدر و مقدار فرزند ، میخواستم ببینم تحلیلی که در زیر میکنم درست هست یا نه و اگه درست نیست ، ممنون میشم درست اش رو توضیح بدین (چون درک این مسئله برام توی کدنویسی مهم هست) .
در کد زیر :
کد:
FatherClass object = new ChildClass();
اشیاء هایی از نوع کلاس ، اشاره گری هستن به مقادیرشون (سمت راست) پس در کد بالا ، object اشاره گری هست به کلاس ChildClass . پس یعنی شی object ، به اعضای اونجایی رو که اشاره میکنه یعنی به اعضای کلاس ChildClass ، دسترسی داره منتها فقط به اعضایی از کلاس فرزند دسترسی داره که در کلاس پدر موجود باشه (تعریف شده باشه)
پس شی object به اعضای جدیدی که در کلاس فرزند تعریف شده ، دسترسی نداره
اگه متدی override شده باشه ، چون اعضای کلاس فرزند رو میبینه و override هم باعث باطل شدن متد در کلاس پدر میشه ، پس عضو override شده در کلاس فرزند اجرا میشه نه عضو virtual در کلاس فرزند
ولی با این تفاسیر ، نمیدونم چرا در شی object ، اگه member hiding اتفاق بیفته ، بجای اجرای عضو مخفی شده در کلاس فرزند ، عضو اصلی در کلاس پدر رو اجرا میکنه ؟؟!!
----------------------------------
یا اینکه این تحلیل درسته؟ (اما فکر کنم تحلیل بالا درست باشه) :
اینکه شی object در کد بالا ، اعضای پدر رو اجرا میکنه بجز حالت override رو که در کلاس پدر اجرا میکنه
کدوم درست هه؟ و اگه اولی درسته ، ممنون میشم جواب سئوال مو بدین و اگه حس میکنین نکته ای رو نمیدونم ، ممنون میشم بگین
سلام،
خیر، این تحلیل درست نیست. اشاره گری زمانی صحیح بود که اپراتور new در تعریف وجود نداشت. از آن رو که در سی شارپ (بر خلاف جاوا) توابع به طور پیش فرض از نوع non-virtual هستن، به هنگام تعریف فوق تنها توابعی مشمول چند ریختی میشن که override شده باشند. در غیر این صورت به دلیل explicitly در سی شارپ توابع مخفی شده از Type آن شی برداشت میشه؛ Type شی هم FatherClass هستش و نه ChildClass.
اطلاعات بیش تر:
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
چجوری با اشاره گر ، یه آرایه ی Unmanaged رو توی سی شارپ بخونم و بنویسم؟
سلام
میخوام با زبان Lua ، یه آرایه ای رو به dll سی شارپ که خروجی Unmanaged Export داره رو بفرستم . لوا نمیتونه بصورت مستقیم ، برای سی شارپ آرایه ارسال کنه
نمیدونم ساختار آرایه در لوا چجوری هه ولی چون لوا با زبان C نوشته شد و از طرفی هم فقط میتونه با خروجی هایی از نوع Unmanaged Export با سی شارپ ، ارتباط برقرار کنه ، برای همین حدس میزنم به احتمال زیاد ساختار زبانش باید Unmanaged باشه
حالا مشکل اینجاست که من اشاره گر به آرایه ای که در لوا ساختم رو برای سی شارپ میفرستم (با استفاده از خود همون اشاره گر ، در لوا میتونم اعضای آرایه رو بخونم) و آدرس اشاره گر هم به درستی به سی شارپ فرستاده میشه اما وقتی میخوام اطلاعات اون اشاره گر به آرایه رو در سی شارپ بخونم ، اطلاعات همون آرایه نیست و یه اطلاعات پرت و پلای دیگه هست .
باید چی کار کنم؟
کدی که برای قضیه ی بالا تست کردم و اطلاعات غلط رو میخونه ، اینه :
در Lua (که فقط اشاره گر به آرایه و تعداد اعضای آرایه رو برای سی شارپ میفرسته . کار خاصی نمیکنه) :
کد:
myArray = {164, 10, 41, 57, 2500, 1};
tableSize = MemoryEx.TableRequiredSize(myArray);
handleMyArray = MemoryEx.AllocateEx(tableSize);
handleMyArray:SetArrayType(MEMEX_ARR_INT); --say konid ghabl az meghdar dadn ba tabeh MemoryEx.Table , data type ro moshakhas konid
myArrayPointer = handleMyArray:GetPointer();
isCreatedInBuffer = MemoryEx.Table(myArrayPointer, myArray);
if (isCreatedInBuffer == true and myArrayPointer ~= nil) then
myArrayInBuffer = MemoryEx.Table(myArrayPointer);
if (myArrayInBuffer ~= nil) then
dllPath = _SourceFolder.."\\ClassLibrary2.dll";
dllHdl = Library.Load(dllPath);
if (dllHdl ~= nil) then
---------------------
firstElementInDll = dllHdl.ArrayPointer8(myArrayPointer, برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
dllHdl:Close_();
end
end
و کدهای سی شارپ :
کد:
[DllExport("ArrayPointer8", CallingConvention.StdCall)]
public static unsafe void ArrayPointer8(int arrayPtr, int arrayLength)
{
int* mainPointer = (int*)arrayPtr;
for (int i = 0; i < arrayLength; i++)
{
MessageBox.Show(mainPointer[i].ToString(), "In Cبرای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
mainPointer[i] = i;
}
-----------------------
بقیه ی کدهای سی شارپی که ازش نتیجه نگرفتم (کلاس Marshal) :
کد:
[DllExport("ArrayPointer4", CallingConvention.StdCall)]
public static int ArrayPointer4(int arrayPtr, int arrayLength)
{
try
{
IntPtr realArrayptr = (IntPtr)arrayPtr;
int[] arrayInC = new int[arrayLength];
Marshal.Copy(realArrayptr, arrayInC, 0, arrayLength);
MessageBox.Show(arrayInC[0].ToString(), "in Cبرای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
return arrayInC[0];
}
catch (Exception)
{
return 0;
}
}
باید چی کار کنم؟
ممنون
- - - Updated - - -
سلام
من میخوام در نرم افزار autoplay media studio ، فرم ایجاد شده در این نرم افزار رو توسط dll ای که در سی شارپ مینویسم ، با این فرم کار کنم (مثلا تغییر اندازه بدم)
اما این نرم افزار و زبان Lua اش ، زبان غیر دات نت هست و همونطور که میدونیم ، بصورت عادی نمیشه با فرم هایی که در زبان غیر دات نت بودجود میان ، در زبان سی شارپ با اون فرم ها کار کنیم . متد Control.FromHandle در سی شارپ هم فقط هندل فرم های دات نت رو به شی مورد نظر تبدیل میکنه
حالا روش و راهی وجود داره که در سی شارپ ، وقتی هندل فرم های غیر دات نت رو میفرستیم براش ، با این فرم ها کار کنیم؟ مثلا هندل فرم غیر دات نت رو بگیره و تغییر اندازه بده اون فرم رو؟
پاسخ: چجوری با اشاره گر ، یه آرایه ی Unmanaged رو توی سی شارپ بخونم و بنویسم؟
نقل قول:
سلام
من میخوام در نرم افزار autoplay media studio ، فرم ایجاد شده در این نرم افزار رو توسط dll ای که در سی شارپ مینویسم ، با این فرم کار کنم (مثلا تغییر اندازه بدم)
اما این نرم افزار و زبان Lua اش ، زبان غیر دات نت هست و همونطور که میدونیم ، بصورت عادی نمیشه با فرم هایی که در زبان غیر دات نت بودجود میان ، در زبان سی شارپ با اون فرم ها کار کنیم . متد Control.FromHandle در سی شارپ هم فقط هندل فرم های دات نت رو به شی مورد نظر تبدیل میکنه
حالا روش و راهی وجود داره که در سی شارپ ، وقتی هندل فرم های غیر دات نت رو میفرستیم براش ، با این فرم ها کار کنیم؟ مثلا هندل فرم غیر دات نت رو بگیره و تغییر اندازه بده اون فرم رو؟
سلام سجاد جان،
اگر سوالت رو درست متوجه شده باشم، همان طور که خودت اشاره کردی سی شارپ به طور مستقیم نمی تونه چنین کاری کنه. ولی می تونی با به کار گیری متد های موجود در user32.dll ویندوز مطابق پیوند های زیر این کار رو انجام بدی:
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
پاسخ: چجوری با اشاره گر ، یه آرایه ی Unmanaged رو توی سی شارپ بخونم و بنویسم؟
نقل قول:
سلام سجاد جان،
اگر سوالت رو درست متوجه شده باشم، همان طور که خودت اشاره کردی سی شارپ به طور مستقیم نمی تونه چنین کاری کنه. ولی می تونی با به کار گیری متد های موجود در user32.dll ویندوز مطابق پیوند های زیر این کار رو انجام بدی:
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]s window&
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]s size? - Stack Overflow
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
سلام
ممنون استاد آرمین
من استفاده از منظورم API های ویندوز نیست . API هم سخت تر هه و هم در هر زبانی میشه ازش استفاده کرد . من منظورم اینه که روشی نیست که هندل ویندوزهای دیگه رو یه جوری تبدیل به هندل ویندوزهای قابل استفاده در زبان های دات نت و Managed Code ها کرد که بعدش با استفاده از متد Control.FromHandle اونو تبدیل به فرم و کلا کلاس کنترل مورد نظر کرد و بعد با اون کلاس کنترل ، بشه ازش استفاده کرد؟
تحقیقات اولیه ام نشون میده در وهله ی اول انگار این کار نشدنی هست . ای کاش مایکروسافت ، یه چاره ای برای این نوع تبدیل میکرد
پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
سلام
اوستا آرمین ، کلاس یا کلاس هایی وجود دارن که خودشون از توابع API استفاده کنن تا دست ما رو برای کار با ویندوزهای دیگه در سی شارپ باز بذارن؟ اگه آره ، اسم شون چیه؟
پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
نقل قول:
سلام
اوستا آرمین ، کلاس یا کلاس هایی وجود دارن که خودشون از توابع API استفاده کنن تا دست ما رو برای کار با ویندوزهای دیگه در سی شارپ باز بذارن؟ اگه آره ، اسم شون چیه؟
سجاد جان منظورت کدوم API هستش و اینکه دستت رو باز بذارن دقیقا چه تعبیری داره؟
پاسخ: طرح مشکلات ، سوالات ، آموزش ها و پروژه های مربوط به زبان های دیگر تحت دات نت
نقل قول:
سجاد جان منظورت کدوم API هستش و اینکه دستت رو باز بذارن دقیقا چه تعبیری داره؟
سلام
ممنون استاد آرمین
منظورم یه چیزی مثل ManagedWinApi هست :
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
البته این هم قوی هست ولی قویتر از این (که مثل این هم راهنما داشته باشه) ، وجود داره؟