从C#中的基类,得到派生类型?

cor*_*ore 57 c# reflection inheritance types

假设我们有这两个类:

public class Derived : Base
{
    public Derived(string s)
        : base(s)
    { }
}

public class Base
{
    protected Base(string s)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能从内部的构造函数中找出BaseDerived是调用?这就是我想出的:

public class Derived : Base
{
    public Derived(string s)
        : base(typeof(Derived), s)
    { }
}

public class Base
{
    protected Base(Type type, string s)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

还有另一种不需要传递的方法typeof(Derived),例如,某种方式在Base构造函数中使用反射吗?

Jul*_*iet 94

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Base b = new Base();
            Derived1 d1 = new Derived1();
            Derived2 d2 = new Derived2();
            Base d3 = new Derived1();
            Base d4 = new Derived2();
            Console.ReadKey(true);
        }
    }

    class Base
    {
        public Base()
        {
            Console.WriteLine("Base Constructor. Calling type: {0}", this.GetType().Name);
        }
    }

    class Derived1 : Base { }
    class Derived2 : Base { }
}
Run Code Online (Sandbox Code Playgroud)

该程序输出以下内容:

Base Constructor: Calling type: Base
Base Constructor: Calling type: Derived1
Base Constructor: Calling type: Derived2
Base Constructor: Calling type: Derived1
Base Constructor: Calling type: Derived2
Run Code Online (Sandbox Code Playgroud)

  • 你在许多代码中隐藏了一个有趣的事实. (35认同)
  • `Derived1 d1 = new Base();`生成编译时错误,你可能意味着另一种方式.FYI`((Base)new Derived1()).GetType().Name`是"Derived1" (5认同)

Joe*_*nos 31

GetType() 会给你你想要的东西.