المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Interface issue when implementing Factory pattern



C# Programming
11-17-2012, 01:17 AM
I'm having trouble with the interface for the Factory Design Pattern. I've looked at
http://dotnet.dzone.com/articles/design-patterns-c-factory,
which follows my design very closely since it was the first good example I found a while back.
I took a look at
http://stackoverflow.com/questions/27294/abstract-factory-design-pattern,
but my design is very different.

Right now, this is what it looks like. I have included a lot of code because I have a feeling the problem has to do with the visual studio project breakdown. It used to be more simple, with my CR5, interface, factory, CB_spec, El, etc in the same visual studio project. I had to move things around as shown per design discussions and the need for CR6, etc to be separate. Now I'm getting some compilation problems I'm not sure what to do with. See ** below for the first and worst. My question is regarding the compilation issue below.

My iCR Visual Studio project which is the interface:

public interface iCR { int CB_IO_Init(int slaveIndex); int WritePortReady(); int WritePortBusy(); void initCRData(byte[] writeBuffer, byte[] statusBuffer, int SlaveIndex, USB_Comm.CB cb, int cr_Type); int ProcessTWriting(ref Byte[] writeDat, ref Byte[] statusDat, ref Byte[] dataDumpWriteCheck); void Failure(String message); void Success(String message); }
My CR_Factory Visual Studio project

namespace CR_Factory { public class Cr { } public class CRFactory { public enum CRType { CR0, CR1, CR3, CR4, CR5, CR6 } public CRFactory() { } public iCR GetCR(CRType type) { iCR cr = null; switch (type) { case CRType.CR5: cr = new CR5(); break; case CRType.CR6: //not done yet break; default: throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type))); } return cr; } public CRType DetermineCR_Type(int type) { switch (type) { case 0: return CRType.CR0; //break; case 1: return CRType.CR1; case 3: return CRType.CR3; case 4: return CRType.CR4; case 5: return CRType.CR5; case 6: return CRType.CR6; default: throw new ArgumentException(string.Format("A type of type {0} cannot be found", type)); } } } }
My CR5 Visual Studio Project has a lot of classes in it, but right now I’m just showing you the part referred to in the factory. Later I’ll create a CR6 VS project, etc. As you can see, the compiler doesn't think I implemented initCRData but it's right there, and curly brackets are fine.

public class CR5 : iCR **compile error CR5_new.CR5 does not implement interface member iCR.initCRData(byte[],byte[],int,USB_Comm.CB,int) { CB_703 cb_specific = null; //constructor public CR5() { cb_specific = new CB_703(SlaveIndex); } public void initCRData(byte[] writeBuffer, byte[] statusBuffer, int slaveIndex, USB_Comm.CB cb_specificInstance, int crType) {... } public int CB_IO_Init(int SlaveIndex) { int result = -534; result = cb_specific.IO_Init(SlaveIndex); return result; } . . . }
I have another Visual Studio Project (actually several) that instantiates the factory and gets the appropriate type. We’ll call it El:

namespace CrWr { public partial class PControl : UserControl { //setup //constructor public PControl() { } /// /// Get the P Control for chosen dll /// public Control GetPControl(USB_Comm.CB cbInstance, string dllSelected, THandlerApplication.Temp.TEMP[] temp, string dll, SC.SC.S_C c0) { cb = cbInstance; createControls(); itsDll = dll; tArr = temp; cert = c0; CR_Factory.CRFactory factory = new CR_Factory.CRFactory(); CRFactory.CRType type = factory.DetermineCR_Type(cr_Type); try { cr = factory.GetCR(type); } catch (Exception ex) { Console.WriteLine(ex.InnerException); } return this; } private void OnP() { int result = -536; while (rL) { result = cr.CB_IO_Init(SlaveIndex); if (result == 0) { … } } . . . }