Моя цель - расширить объект MonoBehaviour от движка Unity3D с помощью моей функциональности. Это то, что я делаю:Расширение методов расширения MonoBehaviour
public static class Extensions {
public static T GetComponentInChildren<T>(this UnityEngine.MonoBehaviour o, bool includeInactive) {
T[] components = o.GetComponentsInChildren<T>(includeInactive);
return components.Length > 0 ? components[0] : default(T);
}
}
Но когда я собираюсь использовать его, я могу получить доступ к нему только тогда, когда я использую this
перед вызовом: this.GetComponentInChildren(true)
Но this
должен быть неявным, верно?
Так я предполагаю, что я делаю что-то неправильно ...
Вот где я использую расширение:
public class SomeController : MonoBehaviour {
private SomeComponent component;
void Awake() {
component = this.GetComponentInChildren<SomeComponent>(true);
}
}
Я надеюсь, что я сделал моя проблема ясна. Есть ли способ расширить MonoBehaviour правильно (без необходимости использовать ключевое слово this
явно) или почему он ведет себя таким образом?
Посмотрите на это так [вопрос] (http://stackoverflow.com/questions/3510964/why-is-the-this-keyword-required-to-call-an-extension-method-from-within-the-e). –