【问题标题】:How to get a object type at the moment of object instantiation C#.如何在对象实例化 C# 时获取对象类型。
【发布时间】:2013-11-10 09:34:49
【问题描述】:

我在数据库中创建了一个带有字段定义的表,我的意思是表名、列名。 然后我创建了一个具有表的所有结构的类。 然后我创建了一个 Property GetObjectType()

我想要的是在实例化的那一刻,属性 GetObjectType 已经通过反射加载了属性的信息。

我做了这样的事情。

public partial class MyClass
{
    private Type boType;
    private string tableName;
    private string fieldName;

    public strig TableName{
            //Get and set
    }

    public strig FieldName{
            //Get and set
    }

    public Type GetObjectType
    {
        get
        {
            if(boType == null)
            {
                this.boType = Type.GetType("NameSpace" + this.FieldName, NameSpace"));
            }
            return this.boType;
        }
    }
}

我想做

MyClass obj = new MyClass();
Type myType = obj.GetObjectType(); //Always null'

我的方法正确吗?

【问题讨论】:

  • 看来您正在重新实现轮子。为什么不直接使用从基类继承的 GetType() 方法?
  • 这不是我的对象的类型。我想要一个来自我的两个属性(TableName、FieldName)的类型
  • 哦,那行不通。 GetType 仅返回其元数据确实存在的类型,即在您的代码中真正定义的类型。您可能想要的是为您的类型获取某种标识符。我猜你必须手动完成。

标签: c# reflection types instance


【解决方案1】:

直接使用 GetType()。您不必为它编写自定义的 GetObjectType() 方法。

如下图,

Myclass obj=new MyClass();
Type type=obj.GetType();

【讨论】:

    【解决方案2】:

    由于继承自 System.Object,每个对象都有 GetType() 方法

    只要做:

     MyClass obj = new MyClass();
     Type myType = obj.GetType();
    

    【讨论】:

      【解决方案3】:

      在 GetObjectType 函数中放置一个断点,并在执行时在即时窗口中测试您的代码行。我猜你的类名/命名空间不完全符合你的期望。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-27
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        相关资源
        最近更新 更多