所以我有两个实例类型“FirstType”和“SecondType”继承自母类“ContaBancaria”。它们都返回来自不同文本框的文本。基本上,他们做同样的事情,但我需要2个不同列表类型的实例(我可能不认为列表与我的问题有任何关系,所以我将继续不详细介绍)
以下是实例:
private FirstType AddTypeFirst()
{
return new FirstType(textBoxNumber.Text,
textBoxBalance.Text,
textBoxName.Text,
textBoxAddress.Text,
textBoxBirth.Text);
}
private SecondType AddTypeSecond()
{
return new SecondType(textBoxNumber.Text,
textBoxBalance.Text,
textBoxName.Text,
textBoxAddress.Text,
textBoxBirth.Text);
}
有没有办法用相同的方法类型返回这两个实例?
编辑: 我的意思是用一种方法返回这两种不同类型的实例,例如:
private [type?] AddInstance()
{
return new [type*] textBoxNumber.Text, //* the type could be FirstType or SecondType
textBoxBalance.Text,
textBoxName.Text,
textBoxAddress.Text,
textBoxBirth.Text);
}
编辑2:
ContaBancaria看起来像这样:
abstract class ContaBancaria
{
public string number { get; set; }
public string balance { get; set; }
public Client data { get; set; }
}
并且,因为有客户......
class Client
{
public string name;
public string address;
public string birth;
}
希望你能帮助我。
答案 0 :(得分:0)
我认为您可以使用泛型方法和开发类。 例如,您有两个类,并且您希望接收其中一个类。这些课程名为" FirstSon"和" SecondSon"他们俩都来自班级"父亲"。
class Father
{
string myName;
public string MyName
{
get { return myName; }
set { myName = value; }
}
public Father()
{
myName = "John";
}
}
class FirstSon : Father
{
string mySecondName;
public string MySecondName
{
get { return mySecondName; }
set { mySecondName = value; }
}
public FirstSon()
{
mySecondName = "Bill";
}
}
class SecondSon : Father
{
int age;
public int Age
{
get { return age; }
set { age = value; }
}
string mySecondName;
public string MySecondName
{
get { return mySecondName; }
set { mySecondName = value; }
}
public SecondSon()
{
mySecondName = "Drake";
age = 21;
}
}
你有方法GetObject()。这种方法是通用的。它接收类的类型,然后检查它接收的类型并返回相同类型的新对象。
public static T GetObject<T>() where T: Father
{
var firstSon = new FirstSon();
var secondSon = new SecondSon();
if (firstSon.GetType() == typeof(T))
return (T)Convert.ChangeType(firstSon, typeof(T));
return (T)Convert.ChangeType(secondSon, typeof(T));
}
它使用方法Convert.ChangeType(对象值,类型转换类型),并允许您将对象转换为您的类型。
,我不相信这是个好主意答案 1 :(得分:-2)
假设您想根据要添加的列表返回正确的类型,您需要编写自己的通用添加函数,并使用Reflection来确定类型:
public static class Ext {
public static void AddInstancia<T>(this List<T> aList) where T : class {
if (typeof(T) == typeof(FirstType))
aList.Add(AddTypeFirst() as T);
else
aList.Add(AddTypeSecond() as T);
}
}
我认为没有理由这样做 - 毕竟,你知道列表的类型,只需为该列表调用正确的函数......
如果您为每个子类型添加一些函数,您也可以使用dynamic
而不是使用Reflection:
public class FirstType : Parent {
public FirstType MakeChild() {
return new FirstType();
}
}
public class SecondType : Parent {
public SecondType MakeChild() {
return new SecondType();
}
}
public static class Static<T> where T : new() {
public static dynamic Value = new T();
}
public static class Ext {
public static void AddInstance<T>(this List<T> aList) where T : new() {
aList.Add(Static<T>.Value.MakeChild());
}
}
您可以调用
var list1 = new List<FirstType>();
list1.AddInstance();