C# Boş Interface kullanmak yanlış mı?

II.Wilhelm

Hectopat
Katılım
11 Eylül 2020
Mesajlar
1.822
Çözümler
6
Yer
Almanya
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;
    }
}
 

Geri
Yukarı