首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基类的惰性方法中获取继承者类名

在基类的惰性方法中获取继承者类名
EN

Stack Overflow用户
提问于 2016-12-02 17:45:14
回答 1查看 212关注 0票数 3

这里是指向C# fiddle https://dotnetfiddle.net/4QTGx3的链接

我已经尝试在基类的静态方法中检索继承类名称。我没有发现任何有帮助的东西。

代码语言:javascript
运行
复制
public class Worker
{
    public string Id1 {get; set;}
    public string Id2 {get; set;}
    public string Id3 {get; set;}
}

public interface IModel
{
}

public class Model1: IModel
{
}

public class Model2: IModel
{
}

public class ModelActor <TModel> where TModel: IModel
{
    private Lazy<Worker> _worker = new Lazy<Worker>(
        () => new Worker() 
        {
            Id1 = new StackFrame().GetMethod().DeclaringType.Name,
            Id2 = MethodBase.GetCurrentMethod().DeclaringType.Name,
            Id3 = typeof(ModelActor <TModel>).Name
        }
    );

    public Worker Worker
    {
        get
        {
            return _worker.Value;
        }
    }
}

public class ModelActor1: ModelActor<Model1>
{
}

public class ModelActor2: ModelActor<Model2>
{
}

public static void Main()
{
    Console.WriteLine("Id1: {0} {1}", new ModelActor1().Worker.Id1,  new ModelActor2().Worker.Id1);
    Console.WriteLine("Id2: {0} {1}", new ModelActor1().Worker.Id2,  new ModelActor2().Worker.Id2);
    Console.WriteLine("Id3: {0} {1}", new ModelActor1().Worker.Id3,  new ModelActor2().Worker.Id3);

    Console.WriteLine("Want to get: ModelActor1 ModelActor2");
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-02 18:32:02

好了,修好了。实际上,您需要添加第二个ModelActor类,因为只有一个签名被调用。

代码语言:javascript
运行
复制
using System;
using System.Reflection;
using System.Diagnostics;

public class Program
{

public class Worker
{
    public string Id1 {get; set;}
    public string Id2 {get; set;}
    public string Id3 {get; set;}

    public string ModelName {get; set;}
}

public interface IModel
{
}

public class Model1: IModel
{
}

public class Model2: IModel
{
}

public class ModelActor <TModel> where TModel: IModel
{
    private Lazy<Worker> _worker = new Lazy<Worker>(
        () => {
                Console.WriteLine("Worker Instance created");

                return new Worker() 
                {
                    Id1 = new StackFrame().GetMethod().DeclaringType.Name,
                    Id2 = MethodBase.GetCurrentMethod().DeclaringType.Name,
                    Id3 = typeof(ModelActor <TModel>).Name,

                    ModelName = typeof(TModel).Name
                };
        }
    );

    public Worker Worker
    {
        get
        {
            return _worker.Value;
        }
    }
}


public class ModelActor2 <TModel> where TModel: IModel
{
    private Lazy<Worker> _worker = new Lazy<Worker>(
        () => {
                Console.WriteLine("Worker Instance created");

                return new Worker() 
                {
                    Id1 = new StackFrame().GetMethod().DeclaringType.Name,
                    Id2 = MethodBase.GetCurrentMethod().DeclaringType.Name,
                    Id3 = typeof(ModelActor <TModel>).Name,

                    ModelName = typeof(TModel).Name
                };
        }
    );

    public Worker Worker
    {
        get
        {
            return _worker.Value;
        }
    }
}

public class ModelActor1: ModelActor<Model1>
{
}

public class ModelActor2: ModelActor2<Model2>
{
}

public static void Main()
{
    Console.WriteLine("Id1: {0} {1}", new ModelActor1().Worker.Id1,  new ModelActor2().Worker.Id1);
    Console.WriteLine("Id2: {0} {1}", new ModelActor1().Worker.Id2,  new ModelActor2().Worker.Id2);
    Console.WriteLine("Id3: {0} {1}", new ModelActor1().Worker.Id3,  new ModelActor2().Worker.Id3);

    Console.WriteLine("Want to get: ModelActor1 ModelActor2\n");

    Console.WriteLine("ModelName: {0} {1}", new ModelActor1().Worker.ModelName,  new ModelActor2().Worker.ModelName);
    Console.WriteLine("No problem with model name.");
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40929074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档