گفتگو هایی در باب سی شارپ

SU-57

Member
سلام

ما می تونیم دو تا namespace با نام یکسان داشته باشیم و کامپایلر خطا نمی گیره

C#:
namespace Autorun
{
  
}
namespace Autorun
{
  
}

اما به محض ایجاد یک کلاس با نام یکسان در دو فضای نام کامپایلر خطا می گیره. میگه شما قبلا کلاسی با این نام در فضای نام Autorun ایجاد کردید. در حالی که در حالت اول دو تا فضای نام مستقل در نظر گرفته شدن ولی انگار مستقل نیستن. اگه مستقل نیستن چرا پس خطا نمی گیره. اصلا ایجاد دو namespace با نام یکسان کاربردی داره که این قابلیت رو مایکروسافت توی سی شارپ گذاشته؟


C#:
namespace Autorun
{
    class Form
    {
    }
}
namespace Autorun
{
    class Form
    {
    }
}
 

the_king

مدیرکل انجمن
سلام

ما می تونیم دو تا namespace با نام یکسان داشته باشیم و کامپایلر خطا نمی گیره

C#:
namespace Autorun
{
 
}
namespace Autorun
{
 
}
نه. این دو تا namespace با نام یکسان نیست، namespace یک محدوده از { تا } مشخص می کنه که هر چی داخلش تعریف بشه به اون فضای نام تعلق بگیره. مثلا شهر تولد در شناسنامه، تو شناسنامه هر کسی محل تولد نوشته شده و شهر تولد خیلی ها شبیه همدیگر شده. اما اون شهر های هم نام همگی یک شهر هستند، چند شهر با اسم یکسان نیستند.

فرضا در یک پروژه ممکنه ده تا کلاس در ده فایل متفاوت تعریف کنید که همگی به فضای نام Autorun تعلق دارند، طبعا در هر فایل یکبار اون namespace Autorun درج میشه، به این معنا نیست که ده تا namespace ئه Autorun با اسامی یکسان داریم. همه اون { } ها دارند محدوده یک namespace به نام Autorun رو مشخص می کنند. فقط یک Autorun بوده، چند تا نیستند.
اما به محض ایجاد یک کلاس با نام یکسان در دو فضای نام کامپایلر خطا می گیره. میگه شما قبلا کلاسی با این نام در فضای نام Autorun ایجاد کردید. در حالی که در حالت اول دو تا فضای نام مستقل در نظر گرفته شدن ولی انگار مستقل نیستن. اگه مستقل نیستن چرا پس خطا نمی گیره. اصلا ایجاد دو namespace با نام یکسان کاربردی داره که این قابلیت رو مایکروسافت توی سی شارپ گذاشته؟


C#:
namespace Autorun
{
    class Form
    {
    }
}
namespace Autorun
{
    class Form
    {
    }
}
هر نام موجودیتی باید در فضای تعریف اش یکتا و منحصر بفرد باشه، مثلا در داخل فضای نام Autorun یا داخل کلاس MyClass یا داخل متد MyMethod و ...
برای همین نمیشه در فضای نام Autorun دو کلاس با نام مشابه Form تعریف بشه.
 

SU-57

Member
این دو تا namespace با نام یکسان نیست، namespace یک محدوده از { تا } مشخص می کنه که هر چی داخلش تعریف بشه به اون فضای نام تعلق بگیره. مثلا شهر تولد در شناسنامه، تو شناسنامه هر کسی محل تولد نوشته شده و شهر تولد خیلی ها شبیه همدیگر شده. اما اون شهر های هم نام همگی یک شهر هستند، چند شهر با اسم یکسان نیستند.
عرض سلام و شب بخیر
استاد علی به نظر من یادگیری مفاهیم سی شارپ از خود کدهای سی شارپ سخت تره. مثلا من اصلا نمی تونم درک درستی از namespace داشته باشم که اصلا چرا باید namespace در کدها وجود داشته باشه و ضرورتش چیه. مثلا اگه نبود چه کمبودی در سی شارپ به وجود میومد که البته مایکروسافت باید بگه.
حالا آقا سجاد در فیلم آموزشی یک مثالی زد که مثلا namespace مثل یک فولدر می مونه و کلاس مثل یک فایل درون یک فولدر می مونه. فولدر به خودی خود اهمیتی نداره و این فایل داخل فولدر مثل txt هست که ارزش داره.
مشکل اینجاست که طبق تعریف، کلاس یک مفهوم انتزاعیه و ما از روی این مفهوم انتزاعی شی می سازیم. مثلا من در ذهنم یک لیوان تصور می کنم و بعد وقتی اون رو ایجاد کردم یعنی یک شی ایجاد کردم. اما در اینجا کلاس یک فایل در نظر گرفته شده با پسوند cs. که خودش یک فایله و اصلا مفهومی و انتزاعی نیست بلکه وجود خارجی داره.
 

the_king

مدیرکل انجمن
عرض سلام و شب بخیر
استاد علی به نظر من یادگیری مفاهیم سی شارپ از خود کدهای سی شارپ سخت تره. مثلا من اصلا نمی تونم درک درستی از namespace داشته باشم که اصلا چرا باید namespace در کدها وجود داشته باشه و ضرورتش چیه. مثلا اگه نبود چه کمبودی در سی شارپ به وجود میومد که البته مایکروسافت باید بگه.
حالا آقا سجاد در فیلم آموزشی یک مثالی زد که مثلا namespace مثل یک فولدر می مونه و کلاس مثل یک فایل درون یک فولدر می مونه. فولدر به خودی خود اهمیتی نداره و این فایل داخل فولدر مثل txt هست که ارزش داره.
مشکل اینجاست که طبق تعریف، کلاس یک مفهوم انتزاعیه و ما از روی این مفهوم انتزاعی شی می سازیم. مثلا من در ذهنم یک لیوان تصور می کنم و بعد وقتی اون رو ایجاد کردم یعنی یک شی ایجاد کردم. اما در اینجا کلاس یک فایل در نظر گرفته شده با پسوند cs. که خودش یک فایله و اصلا مفهومی و انتزاعی نیست بلکه وجود خارجی داره.
لازم نیست مایکروسافت بگه. اون فولدر خیلی اهمیت داره. شما ممکنه در خیلی از فولدر ها یک فایل Readme.txt داشته باشید. بدون وجود اون فولدر Readme.txt ها نه ارتباط شون با سایر فایل ها قابل شناسایی است و نه از هم تفکیک شدنی هستند.
تصور کنید که دارید یک برنامه می نویسید که از چند کمپوننت برنامه نویسی استفاده می کنه، یکی اش برای ساختن فایل pdf یکی اش برای خوندن فایل doc و یکی اش برای ویرایش فایل jpeg.
در هر سه تاشون هم کلاس متفاوتی با نام FileData هست که ساختار شون یا شبیه بهم بوده یا خیلی متفاوت. که خیلی عادیه، هر کدوم رو برنامه نویسان متفاوتی نوشته اند که اصلا خبر ندارند سایر برنامه نویسان چه اسامی ای برای کلاس هاشون بکار می برند. دلیلی نداشته اسامی شون در پروژه شما منحصر بفرد در بیاد. حالا چطوری می توانید این سه تا FileData رو از هم تفکیک کنید؟ بر اساس فضای نام شون. بدون فضای نام هیچ تضمینی وجود نداشته که کنار هم قرار دادن تعاریف متفاوت امکان پذیر باشه.
 

SU-57

Member
تصور کنید که دارید یک برنامه می نویسید که از چند کمپوننت برنامه نویسی استفاده می کنه،
1- استاد علی این معنی کمپوننت یا کامپوننت چیه. اصلا چی هست. توی ساختار سی شارپ که من ندیدم چنین مفهومی یا اسمی اومده باشه. مثلا توی سایت های دانلود نوشته کامپوننت Telerik که چون لیست بلند بالایی داره و برای من نامشخص بود دانلود نکردم. مثلا من نوعی می تونم خودم کمپوننت شخصی درست کنم؟
2- یا مثلا من می تونم متد شخصی برای خودم ایجاد کنم طوری که در یک فایل کاملا مجرا باشه و به صورت تکی. مثلا یک متد ایجاد کنم برای محاسبه فاکتوریل اعداد و این داخل برنامه من نباشه. بلکه توی یک فایل با پسوند مثلا cs. یا پسوند دیگه باشه و مثلا 10 خط باشه و بعد من این متد ها رو همینجوری درست کنم در اوقات فراغت و بعد در هر پروژه ای که می خوام ازش استفاده کنم. نمی دونم دقیقا چطور استفاده کنم ولی فکر کنم اگه پسوندش cs. باشه بتونم کپی کنم توی پروژه اصلی
3- یکی هم مفهوم API های ویندوز. من به یکی از برنامه نویس های خارجی پیام دادم چرا این برنامه رو برای ویندوز 7 درست نمی کنی چون من و خیلی های دیگه ویندوز 7 فقط دوست داریم و اون پیام داد که این برنامه از فلان API ویندوز استفده می کنه که توی ویندوز 7 نیست و توی ویندوز 8 و 10 وجود داره. الان اسمش یادم نیست چون ایمیلش رو حذف کردم ولی باید دبوراه ازش بپرسم.
الان این API های ویندوز های 7 و 8 و 10 در کجا قرار دارند که ما بتونیم در پروژه هامون ازشون استفاده کنیم و از کجا بفهمیم که هر API کاربردش چیه و اصلا چطوری باید توی سی شارپ بیاریم. مثلا وقتی یک برنامه نویس می بینه یک API در ویندوز 7 نیست ولی توی 10 هست چرا نمی تونه برای ویندوز 7 اون رو خودش دستی ایجاد کنه. کار سختیه یا نشدنیه
 

the_king

مدیرکل انجمن
1- استاد علی این معنی کمپوننت یا کامپوننت چیه. اصلا چی هست.
به هر مجموعه نرم افزاری که اجزاء اش از نظر کارکرد یا مفهوم با هم ارتباط دارند کمپوننت میگن، مثلا اگر یکسری توابع باشه که باهاش بشه جلوه صوتی ایجاد کرد، میتوانند در یک مجموعه کنار هم جمع آوری بشوند و تشکیل یک کمپوننت رو بدهند. کمپوننت میتونه یک یا چند فایل dll باشه، کد یک یا چند کلاس باشه، یک یا چند برنامه باشه و ... مهم اینه که اجزاء اش بهم مربوط هستند. اینکه یکسری کد بی ربط کنار هم جمع آوری بشوند تشکیل کمپوننت نمیده.

توی ساختار سی شارپ که من ندیدم چنین مفهومی یا اسمی اومده باشه. مثلا توی سایت های دانلود نوشته کامپوننت Telerik که چون لیست بلند بالایی داره و برای من نامشخص بود دانلود نکردم. مثلا من نوعی می تونم خودم کمپوننت شخصی درست کنم؟
کمپوننت مفهوم نرم افزاری ئه، به زبان برنامه نویسی خاصی ربطی نداره. منوی Project گزینه ...Add Reference دکمه Browse عبارت Component رو در توصیف پسوند ها می بینید :
component.png
بله. کار خاصی لازم نیست بکنید، فقط باید مواردی که از نظر کارکرد و مفهوم بهم مربوط هستند رو در قالب یک پروژه جمع کنید.
2- یا مثلا من می تونم متد شخصی برای خودم ایجاد کنم طوری که در یک فایل کاملا مجرا باشه و به صورت تکی. مثلا یک متد ایجاد کنم برای محاسبه فاکتوریل اعداد و این داخل برنامه من نباشه. بلکه توی یک فایل با پسوند مثلا cs. یا پسوند دیگه باشه و مثلا 10 خط باشه و بعد من این متد ها رو همینجوری درست کنم در اوقات فراغت و بعد در هر پروژه ای که می خوام ازش استفاده کنم. نمی دونم دقیقا چطور استفاده کنم ولی فکر کنم اگه پسوندش cs. باشه بتونم کپی کنم توی پروژه اصلی
بله. متد باید داخل یک کلاس باشه، متد بدون کلاس نداریم، پس اگر متد رو تعریف می کنید باید یک کلاس هم برایش تعریف کنید.
کد cs مادامی که کامپایل نشده قابل اجرا نیست، پس اگر بخواهید از این متد در پروژه فلان استفاده کنید یا باید فایل cs رو به پروژه اضافه کنید یا قبلا کامپایلش کرده باشید و تا بصورت یک dll دربیاد و در پروژه به اون dll ئه reference بدهید.

در تعریف فضای نام محدودیتی ندارید، می توانید یک فضای نام که ربطی به برنامه تون نداره برای کلاس و متد تون تعریف کنید و در هر پروژه ای ازش استفاده کنید.
3- یکی هم مفهوم API های ویندوز. من به یکی از برنامه نویس های خارجی پیام دادم چرا این برنامه رو برای ویندوز 7 درست نمی کنی چون من و خیلی های دیگه ویندوز 7 فقط دوست داریم و اون پیام داد که این برنامه از فلان API ویندوز استفده می کنه که توی ویندوز 7 نیست و توی ویندوز 8 و 10 وجود داره. الان اسمش یادم نیست چون ایمیلش رو حذف کردم ولی باید دبوراه ازش بپرسم.
الان این API های ویندوز های 7 و 8 و 10 در کجا قرار دارند که ما بتونیم در پروژه هامون ازشون استفاده کنیم و از کجا بفهمیم که هر API کاربردش چیه و اصلا چطوری باید توی سی شارپ بیاریم.
سایت مایکروسافت منبع اطلاعاتی سرویس هایی است که نرم افزار های مایکروسافت دارند.
مثلا وقتی یک برنامه نویس می بینه یک API در ویندوز 7 نیست ولی توی 10 هست چرا نمی تونه برای ویندوز 7 اون رو خودش دستی ایجاد کنه. کار سختیه یا نشدنیه
جواب مشخص و ثابتی نداره. API برای استفاده از یک سرویسی است که نرم افزار فلان میده، مثلا سیستم عامل ویندوز یکسری سرویس داره که برای استفاده از اونها API هست. وقتی یک سرویسی از اساس وجود نداشته باشه، اضافه کردن API اش بی فایده است. یا باید از نرم افزار های دیگری استفاده کرد که مشابه اون سرویس رو می دهند یا اگر جایگزینی نداشته باشه قید اش رو زد.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
خواستم بگم Visual Studio 2022 ، نسخه ی preview اش قراره تابستون امسال ارائه بشه :


که نسخه ی کاملش همون سال 2022 احتمالا میاد .
یکی از بزرگترین تغییر این نسخه ، انگار اینه که این نسخه ، 64 بیت هم ارائه میشه .
پلتفرم جدید MAUI که تا جایی که متوجه شدم ، جایگزینی برای پلتفرم Xamarin.Form هست هم ویژگی مهم دیگه اش هست (البته تغییرات ، زیادن) .
به همراه .Net 6 که مهمترین تغییراتش را در سطح پایین و در سطح clr گفتن هست که بیشتر باعث افزایش کارایی و سرعت میشه :


اگه هم اشتباه متوجه نشده باشم ، starcture های بیشتری را برای کتابخونه های .net 6 توسعه میدن (که استفاده از استراکچر باعث افزایش سرعت بیشتری میشه) .

به همراه نسخه ی 9 سی شارپ برای .Net (نه برای .Net Framework که فقط تا نسخه ی 7.3 را بصورت رسمی در آخرین نسخه های ویژال استودیو پشتیبانی میکنه) .

البته استاد ، اگه اشتباهی کردم یا نکاتی هست ، بفرمایند .
 

SU-57

Member
سجاد جان سلام

من توی solution و توی پروژه اون یک کلاس ایجاد کردم به نام Test1.cs و خودش داخلش کلاس داشت و من توی این کلاس یک متد ایجاد کردم که یک عدد رو بر می گردونه از نوع int بعد روی Build Solution کلیک کردم و دیدم که فقط یک فایل exe از Form ایجاد شد و اصلا از اون فایل Test1.cs هیچ فایل dll ایجاد نشد. لطفا بگو باید چیکار کنم.

بعد اومدم یک پزوژه جدید ایجاد کردم ولی از نوع Class Library(.NET Standard و یک فایل به نام ClassLibrary1 ایجاد کرد که داخلش فایل با نام class1.cs قرار داشت و من داخل اون یک متد اضافه کردم و بعد کامپایل کردم و سه تا فایل ایجاد شد که یکیش dll داشت. بعد اومدم این فایل dll رو گذاشتم توی فولدر یکی از solution هایی که فبلا ساختم و به رفرنس هاش اضافه کردم. حالا چطوری از متدی که توی اون فایل dll هست می تونم توی پروژم استفاده کنم. راه ارتباط دادنش به چه صورته؟

البته بعد از کامپایل 3 تا فایل ایجاد شد
ClassLibrary1.deps.json و ClassLibrary1.dll و ClassLibrary1.pdb
من فقط ClassLibrary1.dll رو جدا کردم بردم توی اون پروژه اصلی. حالا این کار درست یا باید همشون رو ببرم و همچنین این دو فایل دیگه که پسوند json و pdb دارن کاربردشون چیه
 

the_king

مدیرکل انجمن
سجاد جان سلام

من توی solution و توی پروژه اون یک کلاس ایجاد کردم به نام Test1.cs و خودش داخلش کلاس داشت و من توی این کلاس یک متد ایجاد کردم که یک عدد رو بر می گردونه از نوع int بعد روی Build Solution کلیک کردم و دیدم که فقط یک فایل exe از Form ایجاد شد و اصلا از اون فایل Test1.cs هیچ فایل dll ایجاد نشد. لطفا بگو باید چیکار کنم.
البته لزومی نداره که حتما dll باشه، ولی به هر حال در منوی Project گزینه ...project name} Properties} زبانه Application گزینه Output type باید Class Library باشه تا dll بسازه.
بعد اومدم یک پزوژه جدید ایجاد کردم ولی از نوع Class Library(.NET Standard و یک فایل به نام ClassLibrary1 ایجاد کرد که داخلش فایل با نام class1.cs قرار داشت و من داخل اون یک متد اضافه کردم و بعد کامپایل کردم و سه تا فایل ایجاد شد که یکیش dll داشت. بعد اومدم این فایل dll رو گذاشتم توی فولدر یکی از solution هایی که فبلا ساختم و به رفرنس هاش اضافه کردم. حالا چطوری از متدی که توی اون فایل dll هست می تونم توی پروژم استفاده کنم. راه ارتباط دادنش به چه صورته؟
اولا کلاس هاتون باید public باشه تا خارج از اون dll تون قابل استفاده سایر اسمبلی ها باشه. ثانیا اسم فضای نام اون dll رو یا در ابتدای کد using می کنید یا جایی که میخواهید از محتویات اون dll استفاده کنید اول فضای نام رو می نویسید. اگر کلاسی داخل کلاس دیگری باشه، اسم کلاس خارجی رو هم باید اول بنویسید. مثلا mynamespae.Class1.Class2

البته بعد از کامپایل 3 تا فایل ایجاد شد
ClassLibrary1.deps.json و ClassLibrary1.dll و ClassLibrary1.pdb
من فقط ClassLibrary1.dll رو جدا کردم بردم توی اون پروژه اصلی. حالا این کار درست یا باید همشون رو ببرم و همچنین این دو فایل دیگه که پسوند json و pdb دارن کاربردشون چیه
اون فایل json مشخصات و تنظیمات جانبی اسمبلی رو ثبت می کنه.
فایل pdb اطلاعاتی است که موقع debug کردن اون فایل اجرایی لازم میشه تا ویژوال استدیو بتونه بفهمه این قسمت که در dll یا exe خطا میده مربوط به کدوم بخش از کد برنامه است.
 

SU-57

Member
البته لزومی نداره که حتما dll باشه، ولی به هر حال در منوی Project گزینه ...project name} Properties} زبانه Application گزینه Output type باید Class Library باشه تا dll بسازه.

اولا کلاس هاتون باید public باشه تا خارج از اون dll تون قابل استفاده سایر اسمبلی ها باشه. ثانیا اسم فضای نام اون dll رو یا در ابتدای کد using می کنید یا جایی که میخواهید از محتویات اون dll استفاده کنید اول فضای نام رو می نویسید. اگر کلاسی داخل کلاس دیگری باشه، اسم کلاس خارجی رو هم باید اول بنویسید. مثلا mynamespae.Class1.Class2


اون فایل json مشخصات و تنظیمات جانبی اسمبلی رو ثبت می کنه.
فایل pdb اطلاعاتی است که موقع debug کردن اون فایل اجرایی لازم میشه تا ویژوال استدیو بتونه بفهمه این قسمت که در dll یا exe خطا میده مربوط به کدوم بخش از کد برنامه است.

استاد علی خیلی ممنونم از پاسختون ولی من نتونستم انجام بدم.
کلمه کلیدی public رو هنوز نخوندم چون توی قسمت 29 آقا سجاد آموزش دادن و من توی قسمت 27 هستم ولی خوب وقتی کلاس ایجاد می کنم کلمه public وجود داره و اکثرا خودش اونجا هست مثل اول رویدادها اتوماتیک ایجاد می شه.
_________________________

1- زبانه Application رو به Class Library تغییر دادم و فایل dll تشکیل شد اما نه برای اون کلاس جداگانه ای که Add کرده بود با پسوند cs بلکه به طور کلی از پروژه من فایل dll تشکیل داد که اسم پروژه هم داره. احتمالا همه کلاس های cs. که در یک پروژه WinFormApp ایجاد بشن راه حلی نداره وقتی پروژه کامپایل می شه برای هر فایل cs. یک dll جداگانه تشکیل بشه یا شاید هم بشه توی این موارد فقط یک فایل cs. داخل پروژه رو به فایل dll تبدیل کرد.

2- حالا من اومدم یک پروژه ایجاد کردم با نام WindowsFormsApp1 و داخل این پروژه یک کلاس ایجاد کردم به نام Class2.cs که داخل این کلاس متدی ایجاد کردم به نام Method1 که این متد یک عددی رو می گیره و دو برابرش می کنه.

بعد اومدم یک کلاس خالی استاندارد با نام ClassLibrary3 ایجاد کردم و داخلش متدی ایجاد کردم به نام Method2 که این متد یک عدد رو می گیره و به توان 2 می رسونه. این کلاس رو کامپیال کردم و فایل dll اون رو در مسیر WindowsFormsApp1 قرار دادم و به رفرنس ها اضافه کردم. بعد روی فرم یک دکمه Button گذاشتم و داخلش یک عددی مثل 15 رو در قالب متغیر int گذاشتم.

حالا می خوام این فایل dll و فایل class2.cs رو طوری به این دکمه button و رویدادی که داره ارتباط بدم که وقتی روی button کلیک می کنم اعداد 30 و 225 رو برگردونه با MessageBox.show. یعنی این عدد بره داخل متد ها و برگشت داده بشه. این قسمت رو بعد از پاسخ شما 2 ساعت کار کردم آخر نشد. فایل ها رو پیوست می کنم اگه وقت داشتید نگاه کنید ببینید راه حلش چیه.
 

پیوست ها

  • ClassLibrary3.zip
    110.1 کیلوبایت · بازدیدها: 2
  • WindowsFormsApp1.zip
    299.9 کیلوبایت · بازدیدها: 1

the_king

مدیرکل انجمن
1- زبانه Application رو به Class Library تغییر دادم و فایل dll تشکیل شد اما نه برای اون کلاس جداگانه ای که Add کرده بود با پسوند cs بلکه به طور کلی از پروژه من فایل dll تشکیل داد که اسم پروژه هم داره. احتمالا همه کلاس های cs. که در یک پروژه WinFormApp ایجاد بشن راه حلی نداره وقتی پروژه کامپایل می شه برای هر فایل cs. یک dll جداگانه تشکیل بشه یا شاید هم بشه توی این موارد فقط یک فایل cs. داخل پروژه رو به فایل dll تبدیل کرد.
نه. همچنین تفکیک پذیری ای نیست، فایل cs بعد از کامپایل دیگه هیچ نقشی ای نداره, صد تا فایل cs هم داشته باشید بعد از کامپایل صرفا یک خروجی dll یا exe است، فرقی نمی کرد که محتویات اون cs ها در چند فایل بوده، چیزی که شما برای cs هاتون می توانید انجام بدهید تفکیک بر اساس فضای نام ئه.
2- حالا من اومدم یک پروژه ایجاد کردم با نام WindowsFormsApp1 و داخل این پروژه یک کلاس ایجاد کردم به نام Class2.cs که داخل این کلاس متدی ایجاد کردم به نام Method1 که این متد یک عددی رو می گیره و دو برابرش می کنه.

بعد اومدم یک کلاس خالی استاندارد با نام ClassLibrary3 ایجاد کردم و داخلش متدی ایجاد کردم به نام Method2 که این متد یک عدد رو می گیره و به توان 2 می رسونه. این کلاس رو کامپیال کردم و فایل dll اون رو در مسیر WindowsFormsApp1 قرار دادم و به رفرنس ها اضافه کردم. بعد روی فرم یک دکمه Button گذاشتم و داخلش یک عددی مثل 15 رو در قالب متغیر int گذاشتم.

حالا می خوام این فایل dll و فایل class2.cs رو طوری به این دکمه button و رویدادی که داره ارتباط بدم که وقتی روی button کلیک می کنم اعداد 30 و 225 رو برگردونه با MessageBox.show. یعنی این عدد بره داخل متد ها و برگشت داده بشه. این قسمت رو بعد از پاسخ شما 2 ساعت کار کردم آخر نشد. فایل ها رو پیوست می کنم اگه وقت داشتید نگاه کنید ببینید راه حلش چیه.
در کلاس ClassLibrary3 تون یک کلاس Class1 دارید که public ئه، اما متد Method2 ای که داخل این Class1 دارید چی؟ public هست؟ نه. private ئه. بصورت پیشفرض محتویات اون کلاس private ئه. باید بجای int Method2(int a) می نوشتید public int Method2(int a) تا Method2 برای دسترسی خارج از بدنه Class1 مهیا باشه.
این قضیه برای اون int Method1(int a) داخل Class2 هم صدق می کنه، Method1 ای که private باشه رو نمی توانید از بیرون Class2 فراخوانی کنید، باید public اش کنید.
وقتی public شون کردید اونوقت می توانید با کدی شبیه به ()var c = new ClassLibrary3.Class1 از کلاس شیء بسازید
و با کدی شبیه به var a = c.Method2(var1) در اون شیء متدی رو فراخوانی کنید.
 

جدیدترین ارسال ها

بالا