簡體   English   中英

C#工廠設計模式WinForms

[英]c# factory design pattern winforms

我是C#的新手,需要作業協助。 我應該創建一個程序,在Visual Studio中使用Windows窗體給出工廠設計模式的示例。 我一直在網上尋求幫助,但是我正在使用的代碼給了我錯誤。 displayResults是我的文本框的名稱,但未被識別。 另外,當我到達

protected void Page_Load (object sender, EventArgs e )

它無法識別我的某些課程。

感謝您對此的任何幫助或建議。 我非常新,很抱歉,如果這確實很明顯。

這是我所有的代碼:

namespace FactoryDesignPattern
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
}

abstract class Factory
{
    public abstract Product GetProduct();
}

class ConcreteFactoryForProudct1 : Factory
{
    public override Product GetProduct()
    {
        return new Product1();
    }
}

class ConcreteFactoryForProudct2 : Factory
{
    public override Product GetProduct()
    {
        return new Product2();
    }
}

interface Product
{
    void GetDetails();
}

class Product1 : Product
{
    public void GetDetails();

    displayResults.WriteLine("Product 1 details are: ");

}

 class Product2 : Product
{
    public void GetDetails();

    displayResults.WriteLine("Product 2 details are: ");
 }
protected void Page_Load (object sender, EventArgs e )
{
Factory[] objFactories = new Factory[2];
objFactories[0] = new ConcreteFactoryForProduct1();
objFactories[1] = new ConcreteFactoryForProduct2();
foreach (Factory objFactories in objFactories)
    {
        product objProduct = objFactory.GetProduct();
        objProduct.GetDetails();
    }
}



}

您的代碼存在多個問題,導致其無法編譯。 以下是對代碼的改進,它可能仍然無法編譯,我自己也沒有嘗試過,但是它應該可以幫助您。 我使用了Trace.WriteLine,因此請注意調試窗口,請使用System.Diagnostics添加,否則無法識別Trace。 我還幾次添加了public關鍵字,以確保各個類之間不會相互隱藏。 可能不需要這樣做。 您在此處實施的工廠方案是正確的。
您的代碼中也有一些錯別字,請小心謹慎,盡管編譯器可以捕獲所有錯別字。

namespace FactoryDesignPattern
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Factory[] objFactories = new Factory[2];
            objFactories[0] = new ConcreteFactoryForProduct1();
            objFactories[1] = new ConcreteFactoryForProduct2();
            foreach (Factory objFactories in objFactories)
            {
                product objProduct = objFactory.GetProduct();
                objProduct.GetDetails();
            }
        }
    }

    public abstract class Factory
    {
        public abstract Product GetProduct();
    }

    public class ConcreteFactoryForProduct1: Factory
    {
        public override Product GetProduct()
        {
            return new Product1();
        }
    }

    public class ConcreteFactoryForProduct2: Factory
    {
        public override Product GetProduct()
        {
            return new Product2();
        }
    }

    public interface Product
    {
        void GetDetails();
    }

    public class Product1 : Product
    {
        public void GetDetails(){
            Trace.WriteLine("Product 1 details are: ");
        }
    }

    public class Product2 : Product
    {
        public void GetDetails(){
            Trace.WriteLine("Product 2 details are: ");
        }
    }
}
namespace Abstract_Factory
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            int x = comboBox1.SelectedIndex;
            Factory[] objFactories = new Factory[1];
            switch (x)
            {
                case 0:
                    objFactories[0] = new Figura1();
                    foreach (Factory ob in objFactories)
                    {
                        FIGURAS objProduct = ob.GetFig();
                        objProduct.Mensaje();
                    }
                    break;
                case 1:
                    objFactories[0] = new Figura2();
                    foreach (Factory ob in objFactories)
                    {
                        FIGURAS objProduct = ob.GetFig();
                        objProduct.Mensaje();
                    }
                    break;
                case 2:
                    objFactories[0] = new Figura3();
                    foreach (Factory ob in objFactories)
                    {
                        FIGURAS objProduct = ob.GetFig();
                        objProduct.Mensaje();
                    }
                    break;
                default:
                    {
                        MessageBox.Show("***");
                        break;
                    }
            }
        }

        public abstract class Factory
        {
            public abstract FIGURAS GetFig();
        }

        public class Figura1 : Factory
        {
            public override FIGURAS GetFig()
            {
                return new Fig1();
            }
        }

        public class Figura2 : Factory
        {
            public override FIGURAS GetFig()
            {
                return new Fig2();
            }
        }
        public class Figura3 : Factory
        {
            public override FIGURAS GetFig()
            {
                return new Fig3();
            }
        }
        public interface FIGURAS
        {
            void Mensaje();
        }
        public class Fig1 : FIGURAS
        {
            public void Mensaje()
            {
                MessageBox.Show("FIGURA 1: CUADRADO");
            }
        }
        public class Fig2 : FIGURAS
        {
            public void Mensaje()
            {
                MessageBox.Show("FIGURA 2: RECTANGULO");
            }
        }
        public class Fig3 : FIGURAS
        {
            public void Mensaje()
            {
                MessageBox.Show("FIGURA 3: TRIANGULO");
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM