0

MasterClassは基本クラスで、Attachvariableこれから継承します。TableMasterClass オブジェクトを格納します。

public class Table
{
    private Dictionary<int, MasterClass> map = new Dictionary<int, MasterClass>();

    public bool isInMemory(int id)
    {
        if (map.ContainsKey(id))
            return true;
        return false;
    }

    public void doStuffAndAdd(MasterClass theclass)
    {
        theclass.setSomething("lalala");
        theclass.doSomething();
        map[theclass.id] = theclass;
    }

    public MasterClass getIt(int id)
    {
        return map[id];
    }
}

だから今これが起こります:

Table table = new Table();
if (!table.isInMemory(22))
{
    Attachvariable attachtest = new Attachvariable(22);
    table.doStuffAndAdd(attachtest);
    Console.WriteLine(attachtest.get_position()); //Get_position is a function in Attachvariable 
}
else
{
    Attachvariable attachtest = table.getIt(22); //Error: Can't convert MasterClass to Attachvariable
    Console.WriteLine(attachtest.get_position());
}

そのクラスの存在を事前に知らなくても、Tableから継承する任意のクラスを使用して動作させる方法はありますか?MasterClassdoStuffAndAdd(MasterClass theclass)AttachvariablegetIt()

Table<T>doStuffAndAdd は MasterClass オブジェクトを Dictionary に追加できないため、使用できません。T が MasterClass から継承されているかどうかを確認する方法はありません。

public class Table<T>
{
    private Dictionary<int, T> map = new Dictionary<int, T>();

    public bool isInMemory(int id)
    {
        if (map.ContainsKey(id))
            return true;
        return false;
    }

    public void doStuffAndAdd(MasterClass theclass)
    {
        theclass.setSomething("lalala");
        theclass.doSomething();
        map[theclass.id] = theclass; //Error: can't convert MasterClass to T
    }

    public T getIt(int id)
    {
        return map[id];
    }
}
4

1 に答える 1

1

私はこれを信じています:

public void doStuffAndAdd(MasterClass theclass)
    {
        theclass.setSomething("lalala");
        theclass.doSomething();
        map[theclass.id] = theclass; //Error: can't convert MasterClass to T
    }

である必要があります

public void doStuffAndAdd(T theclass)
    {
        theclass.setSomething("lalala");
        theclass.doSomething();
        map[theclass.id] = theclass; //should work 
    }

次のようにして、クラスが別のクラスを継承しているかどうかを確認できます。

if(theclass is MasterClass)
{}
于 2012-10-02T21:36:46.483 に答える