نمایش نتایج 1 تا 16 از 16

نام تاپیک: Interface & Delegate

  1. #1
    کاربر دائمی
    تاریخ عضویت
    تیر 1384
    محل زندگی
    مشهد
    پست
    498

    Interface & Delegate

    سلام دستان، من در این سایت تاپیکهای زیادی در مورد delegate خواندم و تقریبا همه آنها برای کنترل یک event و یا تعریف event بکار می رفت.ولی در این سایت http://www.csharp-station.com
    خوندم که میگه interfaceبرای تعریف event بکار می ره.
    راستش من یکم گیج شدم و از اساتید می خواستم یکم بیشتر در مورد این دو مقوله توضیح بدهند و اضلا کی باید از آنها استفاده کرد.
    با تشکر

  2. #2
    کاربر دائمی آواتار aidinwashere
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    پشته سرت
    پست
    632
    میتونین بجاش در مورد Function Pointer ها مطلب بخونین چون معادل Function Pointer ها در #C میشه Delegate. البته با کمی تفاوت چون در مورد ++C مطلب بیشتر هست تا #C.

  3. #3
    Delegate در واقع رفرنس به یک متد هست. که می تونه برای تعریف ایونت ها ازش استفاده بشه چون یه متد رو آدرس دهی می کنه.
    اما اینترفیس اصلا بحثش جداست. اینترفیس یک قرارداد هست. که توسط کلاسهایی که اون رو پیاده سازی می کنند اعمال میشه. مثلا شما چند تا کلاس داری که توشون قراره کارهای insert,update,delete , ... داده ها انجام بشه. یه اینترفیس می سازی و تعریف این متد ها رو توش میذاری. حالا تمام کلاسهایی که با این قرارداد کار می کنند(یا به عبارتی از این اینترفیس ارث بری می کنند) باید این متد ها رو پیاده سازی کنند.

    Delegate:
    http://msdn2.microsoft.com/en-us/lib...8e(VS.71).aspx
    http://www.codeproject.com/useritems...ates_in_C_.asp

    Interface:
    http://msdn2.microsoft.com/en-us/lib...5b(VS.71).aspx
    http://www.codeproject.com/csharp/in...econstruct.asp

  4. #4

    Smile

    نقل قول نوشته شده توسط Future مشاهده تاپیک
    سلام دستان، من در این سایت تاپیکهای زیادی در مورد delegate خواندم و تقریبا همه آنها برای کنترل یک event و یا تعریف event بکار می رفت.ولی در این سایت http://www.csharp-station.com
    خوندم که میگه interfaceبرای تعریف event بکار می ره.
    راستش من یکم گیج شدم و از اساتید می خواستم یکم بیشتر در مورد این دو مقوله توضیح بدهند و اضلا کی باید از آنها استفاده کرد.
    با تشکر
    من تعریف دقیق این دو اصطلاح رو اونجوری که فهمیدم بگم :

    اینترفیس یک قرارداده بین سازنده کلاس و مصرف کننده کلاس و توی pattern ها به شدت از اون استفاده میشه (که البته میشه یک ایونت رو هم با یه اینترفیس پیاده سازی کرد)

    و دیلیگیت از نظر تعریفی یک کلاس است که آبجکتهای ساخته شده از اون میتونن متدهای یک کلاس و یا آبجکت دیگه رو call کنن
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  5. #5
    که البته میشه یک ایونت رو هم با یه اینترفیس پیاده سازی کرد
    توی اینترفیس پیاده سازی نداریم بلکه فقط تعریف متد ها و ... پیاده سازی در کلاس هایی هست که این اینترفیس رو Implement می کنند.

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

    A delegate declaration defines a reference type that can be used to encapsulate a method with a specific signature.
    A delegate instance encapsulates a static or an instance method.
    Delegates are roughly similar to function pointers in C++‎;
    however, delegates are type-safe and secure.

  6. #6
    یک مثال کاربردی از کاری که Interface انجام میده بنویسید (تواناییش و اینکه چرا باید از اون استفاده کرد)
    ---
    Delegate بخاطر اینکه تنها object نگهدارنده و اجرا کننده یک تابع هست، بجز کنترل event ها میشه در خیلی موارد ازش استفاده کرد. حتی در ارتباط بین دو کلاس میتونه کاربرد جالبی داشته باشه.

  7. #7
    یک مثال کاربردی از کاری که Interface انجام میده بنویسید (تواناییش و اینکه چرا باید از اون استفاده کرد)
    من که مثال زدم!
    اگه نمونه کد هم می خواهید به لینک دومی که توی قسمت اینترفیس دادم توجه کنید:
    این یک اینترقیس هست برای استفاده در کلاسهایی که کار Input رو انجام می دهند:

    //The interface IInput is responsible handling string information.
    public interface IInput
    {
    // Returns a string value from a service
    string NotifyOutput();
    }

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

    حالا اینها کلاسهایی هستند که از این قرارداد(اینترفیس) استفاده می کنند:

    // XMLInput reads some elements from an xml file.
    // XMLInput is a subtype of the interface IInput.
    public class XMLInput : IInput
    {
    // An empty constructor
    public XMLInput() {}

    // Implementation of interface
    public string NotifyOutput()
    {
    return ReadXML();
    }

    // Simple read of an XML file
    public string ReadXML()
    {
    string str = "";
    try {
    XmlDocument doc = new XmlDocument();
    string xmlFile = System.Windows.Forms.Application.StartupPath +
    "\\input.xml";
    if (System.IO.File.Exists(xmlFile)){
    doc.Load(@xmlFile);
    XmlNodeList node1 = doc.GetElementsByTagName("node2");
    foreach(XmlNode node2 in node1){
    str += node2.ChildNodes[0].FirstChild.Value;
    }
    }
    else {
    Console.WriteLine("Missing the input.xml from" +
    " application directory.");
    }
    }
    catch (Exception e) {
    Console.WriteLine(e.Message);
    }
    return str;
    }
    }



    // INIInput reads some elements from a simple ini text file.
    // INIInput is a subtype of the interface IInput.
    public class INIInput : IInput
    {
    // An empty constructor
    public INIInput() {}

    // Implementation of interface
    public string NotifyOutput()
    {
    return ReadIni();
    }

    private string ReadIni()
    {
    string str = "";
    string iniFile = System.Windows.Forms.Application.StartupPath +
    "\\input.ini";
    try {
    if (System.IO.File.Exists(iniFile)){
    using (StreamReader sr = new StreamReader(iniFile)) {
    String line;
    while ((line = sr.ReadLine()) != null) {
    str += line;
    }
    }
    }
    else {
    Console.WriteLine("Missing the input.ini " +
    "from application directory.");
    }
    }
    catch (Exception e) {
    Console.WriteLine(e.Message);
    }
    return str;
    }
    }



    // BinInput reads a string from a string object in a binary file.
    // BinInput is a subtype of the interface IInput.
    public class BinInput : IInput
    {
    public BinInput() { }

    // Implementation of interface
    public string NotifyOutput()
    {
    return ReadBin();
    }

    public string ReadBin()
    {
    AStringClass SomeStringClass = null;
    string binFile = System.Windows.Forms.Application.StartupPath +
    "\\input.bin";
    try {
    if (File.Exists(binFile)){
    IFormatter formatter = new
    System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter();
    Stream stream = new FileStream(binFile, FileMode.Open,
    FileAccess.Read, FileShare.Read);
    SomeStringClass = (AStringClass) formatter.Deserialize(stream);
    stream.Close();
    }
    else {
    Console.WriteLine("Missing the input.bin" +
    " from application directory.");
    }
    }
    catch (Exception e) {
    Console.WriteLine(e.Message);
    }
    return SomeStringClass.SomeString;
    }
    }

    // We need this class to cast the serialized objects from the stream,
    // when we read the input.bin file. Is also used to
    // create the binary file.
    // The create of the binary file is not used in this sample instead the
    // input.bin file is coming with the source code.
    [Serializable]
    public class AStringClass
    {
    public string SomeString;

    public AStringClass()
    {
    this.SomeString = "Text from a bin file";
    string binFile = System.Windows.Forms.Application.StartupPath +
    "\\input.bin";
    SaveToBinaryFile(binFile);
    }

    public void SaveToBinaryFile(string binFile){
    try {
    IFormatter formatter = new
    System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter();
    Stream stream = new FileStream(binFile, FileMode.OpenOrCreate,
    FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, this);
    stream.Close();
    }
    catch (Exception e) {
    Console.WriteLine(e.Message);
    }
    }
    }


    این 3 کلاس هر کدوم یک نوعی از ورودی رو می گیرند(xml-ini-bin) و هر سه تاشون استرینگ NotifyOutput رو به نوعی مقدار دهی می کنند.

    متد ها و پراپرتی هایی که توسط اینترفیس تعریف می شن. باید توسط کلاسهایی که توی اون قرارداد هستند حتما پیاده سازی بشن.
    توی مثال بالا نیاز بود که سه کلاس BinInput و INIInput و XMLInput هر سه شون پراپرتی ای داشته باشن که نتیجه خوندن رو توی اون نشون بدن. پس ما یک اینترفیس به نام IInput ایجاد کردیم و یه پراپرتی NotifyOutput توش تعریف کردیم و گفتیم که همه ی این کلاسها باید اون رو ایمپلیمنت کنند(به اصطلاح باید این قرارداد رو اجرا کنند).

    یک مثال خوب هم توی کتاب C#‎ omid_ahmadi عزیز هست می تونید مطالعه کنید.

  8. #8
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط Future مشاهده تاپیک
    http://www.csharp-station.com
    خوندم که میگه interfaceبرای تعریف event بکار می ره.
    راستش من یکم گیج شدم
    با تشکر
    کجا همچین چیزی را گفته؟ اگر میتوانید اون قسمت را کپی و پیست کنید.

    نقل قول نوشته شده توسط once4ever مشاهده تاپیک
    یک مثال کاربردی از کاری که Interface انجام میده بنویسید (تواناییش و اینکه چرا باید از اون استفاده کرد)
    ---
    Delegate بخاطر اینکه تنها object نگهدارنده و اجرا کننده یک تابع هست، بجز کنترل event ها میشه در خیلی موارد ازش استفاده کرد. حتی در ارتباط بین دو کلاس میتونه کاربرد جالبی داشته باشه.
    چرا باید استفاده کرد نداره، خصوصیتی داره که به کار میاد و مشکلاتی را حل میکند (هر چی که یک مشکلاتی را حل میکند مشکلات دیگری بوجود میاره، استفاده‌اش هم به این بستگی دارد که از مشکلاتی که را حل مینکد از مشکلاتی که بوجود میاره بیشتر باشد).

    در مورد Delegate بین دو کلاس، ساده ترین کاربردش در Obesorver Pettern با استفاده از ایجاد Call Back ها هستش که هر کلاس کلاینتی خودش را برایه دریافت Event هایه بخصوصی رجیستر میکند.
    آخرین ویرایش به وسیله omid_Ahmadi : دوشنبه 28 خرداد 1386 در 14:45 عصر

  9. #9
    کاربر دائمی آواتار ARA
    تاریخ عضویت
    آبان 1383
    محل زندگی
    Bad Sector
    پست
    448
    بگذارین یک تعریف از delegate رو هم من بگم

    از delegate به عنوان یک قطعه کدی که در برنامه تزریق میشود نام میبرند در جاهایی که ما متد های غیر همزمان داریم از این روش برای تزریق کد به بدنه یک ترد استفاده میکنند

  10. #10
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط ARA مشاهده تاپیک
    بگذارین یک تعریف از delegate رو هم من بگم

    از delegate به عنوان یک قطعه کدی که در برنامه تزریق میشود نام میبرند در جاهایی که ما متد های غیر همزمان داریم از این روش برای تزریق کد به بدنه یک ترد استفاده میکنند
    این تعریف است و یا مثال یکی از جاهایی که استفاده
    میشه؟
    در مورد تزریق کدی که گفتید یکمقداره بیشتری اطلاعات و یا لینک بدید.

  11. #11
    کاربر دائمی آواتار ARA
    تاریخ عضویت
    آبان 1383
    محل زندگی
    Bad Sector
    پست
    448
    ارژنگ عزیز الان یادم نیست کجا خوندم ولی چک میکنم اگه پیداش کردم مطلب رو اینجا میگذارم

    یک جوری مفهوم رو نشون میداد

  12. #12
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    نقل قول نوشته شده توسط reza_rad مشاهده تاپیک
    Delegate در واقع رفرنس به یک متد هست.
    این بهترین و واضح ترین تعریف از delegate هست.

  13. #13
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    یک Delegate، نوع داده ایست که یه متد الگو تعریف میکند و یک نمونه ی ایجاد شده از Delegate، رفرنسی به اون متد خاص است.
    برگرفته از کتاب :
    Packt Publishing GDI plus Custom Controls with Visual C.Sharp

  14. #14
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    فکر میکنم یک تعریف Delegate در فارسی یکمقداره بیشتری کار نیاز داره.
    تعریف و مثال مایکروسافت http://msdn2.microsoft.com/en-us/lib...59(VS.71).aspx

    A delegate declaration defines a type that encapsulates a method with a particular set of arguments and return type. For static methods, a delegate object encapsulates the method to be called. For instance methods, a delegate object encapsulates both an instance and a method on the instance. If you have a delegate object and an appropriate set of arguments, you can invoke the delegate with the arguments.

  15. #15
    کاربر دائمی آواتار yavari
    تاریخ عضویت
    مهر 1384
    محل زندگی
    ایران - یزد
    پست
    1,014
    سلام

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

    موفق باشید .
    فایل های ضمیمه فایل های ضمیمه

  16. #16
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    نقل قول نوشته شده توسط Future
    سلام دستان، من در این سایت تاپیکهای زیادی در مورد delegate خواندم و تقریبا همه آنها برای کنترل یک event و یا تعریف event بکار می رفت.
    خوندم که میگه interfaceبرای تعریف event بکار می ره.
    interface برای اعلان event، خاصیت یا متد، بکار میره و پیاده سازی اونها، به عهده کلاس واگذار خواهد شد. (interface یک شئ به حساب نمیآد و از کلاس object مشتق نشده و کلاس نیست، تنها یکسری اعلان (تعریف مشخصات) در آن وجود داره)

    بنظرم، همانطور که یک خاصیت، مثل سر پوشی برای فیلدهاست، یک event هم مثل یک سرپوش بر روی delegate هاست... مثال زیر رو نگاه کنید، تا حدودی متوجه خواهید شد:


    delegate void MyDelegate();
    MyDelegate instanceOfDelegate;
    event MyDelegate ItIsJustAnEvent
    {
    add
    {
    instanceOfDelegate += value;
    }
    remove
    {
    instanceOfDelegate -= value;
    }
    }

    add و remove یا باید باهم باشند یا اصلا نباشند.
    البته استفاده کردن از آن، فقط به شکل فوق، مناسب نیست مگر اینکه بخواهیم در حین add شدن، کار خاصی رو انجام دهیم در غیر اینصورت، بصورت عادی یعنی بدون add و remove، یک event را تعریف میکنیم.

    در اینترفیس، event را بدون add و remove اعلان میکنیم.

تاپیک های مشابه

  1. آموزش Delegate در #C
    نوشته شده توسط بابک زواری در بخش C#‎‎
    پاسخ: 8
    آخرین پست: سه شنبه 11 تیر 1392, 18:03 عصر
  2. آموزش delegate در VB.Net
    نوشته شده توسط بابک زواری در بخش VB.NET
    پاسخ: 13
    آخرین پست: سه شنبه 07 آبان 1387, 12:50 عصر
  3. فواید یک Delegate در یک برنامه ...
    نوشته شده توسط _hosseini_ در بخش C#‎‎
    پاسخ: 2
    آخرین پست: چهارشنبه 28 آذر 1386, 13:41 عصر
  4. کار با DELEGATE
    نوشته شده توسط Vakily در بخش C#‎‎
    پاسخ: 4
    آخرین پست: یک شنبه 18 تیر 1385, 15:34 عصر
  5. کسی می تونه در مورد delegate ها توضیح بده؟
    نوشته شده توسط linux در بخش VB.NET
    پاسخ: 2
    آخرین پست: دوشنبه 23 آذر 1383, 08:25 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •