PDA

View Full Version : حرفه ای: کاربرد یک متد از نوع interface چی میتونه باشه؟



hmahdavi921
پنج شنبه 17 دی 1394, 17:25 عصر
سلام
در یکی از پروژه هایی که از اینترنت دانلود کردم متدی رو به این شکل استفاده کرده البته کارش در مورد ConnectionString هست اما خوب ، برگشتی از نوع اینترفیس ؟ واقعا نمیتونم براش کاربردی رو متصور بشم . دوستان راهنمایی بفرمائید.


public IDataReader GetItem(int itemId)
{
return SqlHelper.ExecuteReader(ConnectionString, NamePrefix + "spGetItem", itemId);
}

ahmad156
پنج شنبه 17 دی 1394, 23:39 عصر
نوع برگشتی از نوع Interface خیلی معمول هست.در واقع مقدار برگشتی Object ای از یک نوع Class هست که Interface مد نطر رو پیاده سازی می کند

hmahdavi921
جمعه 18 دی 1394, 09:01 صبح
نوع برگشتی از نوع Interface خیلی معمول هست.در واقع مقدار برگشتی Object ای از یک نوع Class هست که Interface مد نطر رو پیاده سازی می کند

میتونید یک مثال بزنید . من خیلی متوجه موضوع نشدم.

ahmad156
جمعه 18 دی 1394, 11:07 صبح
public interface ICar
{
public string Make { get; }
}

public class Malibu : ICar
{
public string Make { get { return "Chevrolet"; } }
}

public class Mustang : ICar
{
public string Make { get { return "Ford"; } }
}
با در نظر گرفتن مثال بالا،فکر کنین که خروجی تابع شما میتونه یکی از کلاس های بالا باشه (Malibue و Mustang).اینجوری دیگه نیاز نیست که دو تابع جداگانه با خروجی های جداگانه (کلاس ها) بنویسین و بدون در نطر گرفتن پیچیدگی و پیاده سازی نوع برگشتی از اون استفاده میکنین
در اصل استفاده از Interface زمانی مفید و موثر هست که از یک Interface چندین پیاده سازی وجود داشته باشه که بتونین تابع واحدی بنویسین که نوع برگشتی از Interface مد نطر رو داشته باشه و بتونین برای چندین پیاده سازی از یک همین تابع استفاده کنین.در ضمن زمانی که شما از Interface استفاده میکنین نیازی به پیاده سازی اون ندارین و فقط میدونین چه توابعی رو باید در آینده پیاده سازی کنه

hmahdavi921
جمعه 18 دی 1394, 14:45 عصر
بله این روش .کاربرد اینترفیس هست و کاملا درسته اما من منظورم متدی هستش که نوع برگشتی اون اینترفیس هست .شما در کدتون پراپرتی رو استفاده کردین.
کد رو دوباره میزارم ببینید

public IDataReader GetItem(int itemId)
{
return SqlHelper.ExecuteReader(ConnectionString, NamePrefix + "spGetItem", itemId);
}

A.S.Roma
جمعه 18 دی 1394, 21:27 عصر
نوع روابط از نوع is a هست. نتیجتا" هر کلاسی که اون Interface رو پیاده سازی کرده می تونه return بشه.
یه مثال که شاید کاربردی هم باشه حتی !
public interface ITransporter
{
void Send(string message, string node);
}


public class Email : ITransporter
{
public void Send(string message, string node)
{
Console.WriteLine("Sending messag : " + message + " by email to node : " + node);
}
}


public class Sms : ITransporter
{
public void Send(string message, string node)
{
Console.WriteLine("Sending messag : " + message + " by sms to node : " + node);
}
}


public class TransporterManager
{
public static ITransporter GetTransporter(int type)
{
if (type == 0)
{
return new Email();
}
else
{
return new Sms();
}
}
}


public class Foo
{
public void SendWelcomeMessage()
{
string message = "welcome !";
var transporter = TransporterManager.GetTransporter(1);
transporter.Send(message, "nodeID");
}
}