C# 应用程序中的抽象工厂实现

Abstract factory implementation within C# application

我想实施 abstract factory design pattern。我添加了这个片段:

  public class Class1
{

   static Ete _ete;
   static Hiver _hiver;


    public static void Main(Clothes cl)
    {
        _ete = cl.CreateEteClothes();
        _hiver = cl.CreateHiverClothes();
        Console.WriteLine(_ete.GetMarque());
        Console.ReadKey();
        Console.WriteLine(_hiver.GetMarque());
        Console.ReadKey();

    }
}


public abstract class Clothes
{
    public abstract Ete CreateEteClothes();
    public abstract Hiver CreateHiverClothes();

}


public abstract class ItalianFactory: Clothes
{
    public override Ete CreateEteClothes()
    {
        return new TShirtJuve();
    }

    public override Hiver CreateHiverClothes()
    {
        return new PullJuve();
    }
}
public abstract class FrenchFactory : Clothes
{
    public override Ete CreateEteClothes()
    {
        return new TShirtPsg();
    }

    public override Hiver CreateHiverClothes()
    {
        return new PullPsg();
    }

}

public abstract class TunisianFactory : Clothes
{
    public override Ete CreateEteClothes()
    {
        return new TShirtCa();
    }

    public override Hiver CreateHiverClothes()
    {
        return new PullCa();
    }

}

public abstract class Ete
{ 
public abstract string GetMarque();
}

public abstract class Hiver
{
    public abstract string GetMarque();
}

public class TShirtJuve: Ete
{

    public override string GetMarque()
    {
        return "Juventus T shirt";
    }
}

public class TShirtPsg : Ete
{

    public override string GetMarque()
    {
        return "PSG T shirt";
    }
}

public class TShirtCa : Ete
{

    public override string GetMarque()
    {
        return "club africain T shirt";
    }
}


public class PullJuve : Hiver
{

    public override string GetMarque()
    {
        return "Juventus Pull";
    }
}

public class PullPsg : Hiver
{

    public override string GetMarque()
    {
        return "PSg Pull";
    }
}
public class PullCa : Hiver
{

    public override string GetMarque()
    {
        return "Club africain Pull";
    }
}

我想测试这个实现,但我得到一个异常,表明 main 方法的签名是不可接受的。

那么我该如何修改我的代码来测试这个设计模式的实现呢?

你有public static void Main(Clothes cl)

这应该是 static void Main(string[] args),因为这是应用程序的入口点,并且只能有一个入口点。有关详细信息,请参阅 .NET documentation

方法的签名通常由方法名称、return类型和参数组成。您的应用程序需要 Main 方法的正确签名,因此它给您这个异常。