C# 如何在c中访问子类的方法?

C# 如何在c中访问子类的方法?,c#,C#,当gameObject.AddComponent返回某个类的实例时,我需要访问它的基本参数 gameObject.AddComponent函数具有返回类型Component 项目中的继承看起来是这样的: Object <- Component <- Behaviour <- MonoBehaviour <- TDefault <- ... 产生 内部编译器错误。有关更多信息,请参阅控制台日志。 输出为:错误CS0518:预定义类型 未定义或导入System.Run

当gameObject.AddComponent返回某个类的实例时,我需要访问它的基本参数

gameObject.AddComponent函数具有返回类型Component

项目中的继承看起来是这样的:

Object <- Component <- Behaviour <- MonoBehaviour <- TDefault <- ...
产生

内部编译器错误。有关更多信息,请参阅控制台日志。 输出为:错误CS0518:预定义类型 未定义或导入System.Runtime.CompilerServices.CallSite 错误CS0518:预定义的类型 未定义或导入System.Runtime.CompilerServices.CallSite 1

我试着加上

using System.Runtime.CompilerServices.CallSite;
但这只会改变错误

内部编译器错误。有关更多信息,请参阅控制台日志。输出为:错误CS0518:未定义或导入预定义类型System.Runtime.CompilerServices.CallSite“” 错误CS0518:未定义或导入预定义的typeSystem.Runtime.CompilerServices.CallSite“1”

我确信返回的变量的类型是。。。。内置编辑器将正确显示它


如何获取属性?

添加组件具有通用重载,因此您应该能够执行以下操作:

effect_name newComponent = gameObject.AddComponent<effect_name>();

再多研究一下。您确定effect\u name继承了TDefault吗?

如果您想访问附加到gameobject的类或组件的方法是否为子对象,可以使用gameobject.GetComponent.MyMethod[params]


如果要访问游戏对象的子对象->gameobject.Transform.getChild


如果要添加组件,请使用AddComponent方法。

解决方案正在转换到接口:

一,

二,


3Essentail ess=gameObject.AddComponenteffect\u名称为IDefault.get\u essential

什么是印刷?您如何知道AddComponent返回的是TDefault?你从gameObject.AddComponenteffect\u name.GetType.ToString中得到了什么?我得到了int\u param,它是我从TDefault手动继承的类型。打印是引擎内置的用于调试的功能。如果我没弄错的话,它只是调用Debug.LogGeneric版本的AddComponent不接受类型参数。我只能调用创建新TDefault的AddComponent,但我从未说过effect_name继承了TDefault。它是一个字符串,指定类的名称,我正试图添加该类的实例。我想添加一个组件。此外,我希望引用此组件的属性。在添加GetComponent之前,我无法使用它。添加后,如何将其与其他相同类型的组件区分开来?我在同一个游戏对象中从未有过更多相同类型的组件,我使用第三个游戏对象来管理麻烦物品,或者我更改/使用/修改游戏对象上的当前组件,不确定哪种组件需要2个相同类型的组件。祝你好运
effect_name newComponent = gameObject.AddComponent<effect_name>();
    using UnityEngine;
    using System.Collections;
    using NExtensionMethods;

    public class TDefault:MonoBehaviour,IDefault
    {
        public  TEssentail essential=new TEssentail();
        public TEssentail get_essential()
        {
            if(essential==null)
                essential=new TEssentail();
            return essential;
        }

        public TDefault ()
        {
        }
    }
using UnityEngine;
using System.Collections;

public interface IDefault
{

    TEssentail get_essential();
}