1

解決できないように見える問題があります。

次のように設定されたクラスがあるとします。

public abstract class GenericCustomerInformation
{
    //abstract methods declared here
}

public class Emails : GenericCustomerInformation
{
    //some new stuff, and also overriding methods from GenericCustomerInformation
}

public class PhoneNumber : GenericCustomerInformation
{
    //some new stuff, and also overriding methods from GenericCustomerInformation
}

ここで、次のような関数設定があるとします。

private void CallCustomerSubInformationDialog<T>(int iMode, T iCustomerInformationObject)
{
    //where T is either Emails or PhoneNumber

    GenericCustomerInformation genericInfoItem;

    //This is what I want to do:
    genericInfoItem = new Type(T);

    //Or, another way to look at it:
    genericInfoItem = Activator.CreateInstance<T>(); //Again, does not compile
}

CallCustomerSubInformationDialog<T>関数には、基本型の変数があり、入っGenericCustomerInformationてくるものは何でもインスタンス化したいT(派生型のいずれか:EmailsまたはPhoneNumber)

簡単なことは、一連のif条件を使用することですが、コードが必要以上に大きくなるため、条件付きで何もしたくありません..

4

1 に答える 1

1

このようなものでしょうか?(または私は誤解していますか?)

private void CallCustomerSubInformationDialog<T>(int iMode, T iCustomerInformationObject) where T: GenericCustomerInformation, new()
{
    //where T is either Emails or PhoneNumber
    GenericCustomerInformation genericInfoItem;
    //This is what you could try to do:
    genericInfoItem = new T();

}

注意: T の制約に注意してください...

于 2013-02-10T13:21:33.550 に答える