II.Wilhelm
Hectopat
Daha fazla
- Cinsiyet
- Erkek
- Meslek
- König
Merhaba. Interface leri boş bırakıp tamamen polimorfizm amacıyla kullanmak yanlış mıdır? Şöyle bir kod yazdım ve burada boş Interface kullandım.
C#:
namespace YazilimCalismasiConsole61;
internal class Program
{
static void Main(string[] args)
{
MailActions MailActions = new MailActions();
MailActions.Send(new Gmail(), new GmailSendParameter("", DateTime.UtcNow));
MailActions.Send(new Hotmail(), new HotmailSendParameter("", DateTime.UtcNow, ""));
MailActions.Read(new Hotmail(), new HotmailReadParameter(null, ""));
MailActions.Read(new Gmail(), new GmailReadParameter(null, DateTime.UtcNow, ""));
Console.ReadLine();
}
}
class MailActions // Herhangibi bir Mail sınıfının Metotlarını Çağıracağımız Yer
{
public bool Send<T, K>(IMailServer<T, K> MailServer, T Parameters) where T : ISendMailParameters, new() where K : IReadMailParameters, new()
{
return MailServer.SendMail(Parameters);
}
public bool Read<T, K>(IMailServer<T, K> MailServer, K Parameters) where T : ISendMailParameters, new() where K : IReadMailParameters, new()
{
return MailServer.ReadMail(Parameters);
}
}
public interface ISendMailParameters //Send Metodunun Parametresini Almak İçin Kullandığım İnterface. Sadece İşaret Amacıyla Kullanılıyor.
{
}
public interface IReadMailParameters //Read Metodunun Parametresini Almak İçin Kullandığım İnterface. Sadece İşaret Amacıyla Kullanılıyor.
{
}
public record struct GmailSendParameter : ISendMailParameters //ISendMailParameters ile İşaretleyerek Send parametresi olacağını belirttim.
{
public string Message { get; init; }
public DateTime DateToSent { get; init; }
public GmailSendParameter(string Message, DateTime DateToSent)
{
this.Message = Message;
this.DateToSent = DateToSent;
}
}
public record struct HotmailSendParameter : ISendMailParameters //ISendMailParameters ile İşaretleyerek Send parametresi olacağını belirttim.
{
public string Message { get; init; }
public DateTime DateToSent { get; init; }
public string EmailAdress { get; init; }
public HotmailSendParameter(string Message, DateTime DateToSent, string EmailAdress)
{
this.Message = Message;
this.DateToSent = DateToSent;
this.EmailAdress = EmailAdress;
}
}
public record struct GmailReadParameter : IReadMailParameters //IReadMailParameters ile İşaretleyerek Read parametresi olacağını belirttim.
{
public Gmail Email { get; init; }
public DateTime DateToSent { get; init; }
public string EmailAdress { get; init; }
public GmailReadParameter(Gmail email, DateTime dateToSent, string emailAdress)
{
Email = email;
DateToSent = dateToSent;
EmailAdress = emailAdress;
}
}
public record struct HotmailReadParameter : IReadMailParameters //IReadMailParameters ile İşaretleyerek Read parametresi olacağını belirttim.
{
public Hotmail Email { get; init; }
public string EmailAdress { get; init; }
public HotmailReadParameter(Hotmail email, string emailAdress)
{
Email = email;
EmailAdress = emailAdress;
}
}
interface IMailServer<SendParameter, ReadParameter> where SendParameter : ISendMailParameters, new() where ReadParameter : IReadMailParameters, new() //Mail sınıflarının implemente ettiği interface. T Send Metodu için, K Read Metodu için kullanılacak.
{
bool SendMail(SendParameter Parameter); //Send Metodu. SendParameter Tipinde parametre alıyor.
bool ReadMail(ReadParameter Parameter); //Read Metodu. ReadParameter Tipinide parametre alıyor.
}
public class Gmail : IMailServer<GmailSendParameter, GmailReadParameter> // Gmail sınıfı. IMailServerı implemente ediyor ve GmailSendParameter, GmailReadParameter Generic Tip olarak veriliyor. Bunlar ise Mail serverda parametre olarak isteniyordu.
{
public bool ReadMail(GmailReadParameter Parameter)
{
Console.WriteLine("Gmail Maili Okundu");
return true;
}
public bool SendMail(GmailSendParameter Parameter)
{
Console.WriteLine("Gmail Maili Gönderildi");
return true;
}
}
public class Hotmail : IMailServer<HotmailSendParameter, HotmailReadParameter> //Hotmail Sınıfı. Burada ise Gmail yerine Hotmail parametre sınıflarını generic tip olarak gönderdim.
{
public bool ReadMail(HotmailReadParameter Parameter)
{
Console.WriteLine("Hotmail Maili Okundu");
return true;
}
public bool SendMail(HotmailSendParameter Parameter)
{
Console.WriteLine("Hotmail Maili Gönderildi");
return true;
}
}