I'm trying to implement a factory method that attaches to two classes. They're essentially the same class, but belong to different namespaces. I want to preserve the data between the two classes as well. This is the outline of what I'm trying to do, but I'm very new to C#.
namespace MyMainNameSpace
{
using MySubNameSpace;
using MyOtherSubNameSpace;
public static class FactoryClass
{
public static MyFirstClass ConvertToSecondClass()
{
var mySecondClass = new MySecondClass()
{
Attr1 = MyFirstClass().Attr1;
Attr2 = MySecondClass().Attr2;
};
return mySecondClass;
public static MySecondClass ConvertToFirstCLass()
{
var myFirstClass = new MyFirstClass()
{
Attr1 = MySecondClass().Attr1;
Attr2 = MySecondClass().Attr2;
}
return myFirstClass;
}
}
}
namespace MyOtherSubNameSpace
{
public class MySecondClass
{
public required string Attr1 { get; set; }
public required string Attr2 { get; set; }
}
}
namespace MySubNameSpace
{
public class MyFirstClass
{
public required string Attr1 { get; set; }
public required string Attr2 { get; set; }
}
}
How do I extract the attributes Attr1
and Attr2
from each class to populate the new one in my factory method?
Your factory methods need to get an instance of the object they are trying to convert. You might try something like this:
public static MySecondClass ConvertToSecondClass(MyFirstClass mfc)
{
var mySecondClass = new MySecondClass()
{
Attr1 = mfc.Attr1;
Attr2 = mfc.Attr2;
};
return mySecondClass;
}
public static MyFirstClass ConvertToFirstCLass(MySecondClass msc)
{
var myFirstClass = new MyFirstClass()
{
Attr1 = msc.Attr1;
Attr2 = msc.Attr2;
}
return myFirstClass;
}
Then you can use them:
MyFirstClass a = new MyFirstClass()
{
Attr1 = "Foo",
Attr2 = "Bar"
};
MySecondClass b = ConvertToSecondClass(a);
Another nice way to do this is to use extension methods:
public static MySecondClass ConvertToSecondClass(this MyFirstClass mfc)
{
var mySecondClass = new MySecondClass()
{
Attr1 = mfc.Attr1;
Attr2 = mfc.Attr2;
};
return mySecondClass;
}
public static MyFirstClass ConvertToFirstCLass(this MySecondClass msc)
{
var myFirstClass = new MyFirstClass()
{
Attr1 = msc.Attr1;
Attr2 = msc.Attr2;
}
return myFirstClass;
}
Then you can use them:
MyFirstClass a = new MyFirstClass()
{
Attr1 = "Foo",
Attr2 = "Bar"
};
MySecondClass b = a.ConvertToSecondClass();