2015-12-13 8 views
1

Я новичок в мире единства, и я на самом деле создаю небольшую 2D игры вот моя проблема:класса, который расширяет другой класс, который расширяет Singleton (шаблон) общий класс

В моем проекте я использовал Singleton родовым класс, который я нашел здесь: http://wiki.unity3d.com/index.php/Singleton

Это было прекрасно до сих пор, я хочу создать класс, который я буду называть Parent, этот класс расширяет Singleton, и каждый ребенок родителя должен быть синглом, и я хочу знать, как Я могу это сделать?

Это не работает:

public class Parent : Singleton<Parent>{ 
protected Parent(){} 


public virtual void method(){ 
} 

public void methidForAllChildes(){ 
} 

} 

public class Child : Parent{ 
    public override void method(){ 
    } 
} 

Когда я зову:

(Child.Instance).method(); 

я получаю Parent.method() вместо Child.method()

+0

Как вы создаете «экземпляр»? – Backs

+0

Я создаю «экземпляр», вызывая «Child.Instance», который определен в классе «Singleton», который вы можете увидеть здесь [ссылка] (http://wiki.unity3d.com/index.php/Singleton), но вместо этого «Parent .Instance' исполняется – Solidus

ответ

1

Ваша проблема заключается в том, что ваш класс детей распространяется Singleton<Parent>, как показано ниже:

Singleton<Parent> <- 
    Parent   | inherited from 
     Child ------- 

И в Singleton<T>, есть свойство называется Instance:

public static T Instance { 
    get; 
} 

Так что, если ваш замкнутый общий класс Singleton<Parent>, свойство будет

public static Parent Instance { 
    get; 
} 

Это означает, Child унаследовал выше свойство, как Что ж. Таким образом, в Child указанная выше декларация неявно. Если вы все еще не получите его, в Child, Instance все еще возвращает Parent! Это потому, что Child действительно наследует от Singleton<Parent>!

Теперь, когда вы знаете, Child.Instance Возвращает Parent, вы знаете, почему Parent «s method называется, потому что, очевидно, вы вызываете из экземпляра Parent, не Child.

+0

Спасибо, но как я могу элегантно отсылать 'Child' к' Singleton', чтобы сделать его 'public static Child Instance', когда он является дочерним? – Solidus

Смежные вопросы