繁体   English   中英

C#获取类声明名称

[英]C# Get class declaration name

是否可以(动态)获取类的声明名称并将其作为参数传递给构造函数,以在类本身中设置name变量?

例:

public class Foo
{
    public string name;
    public Foo()
    {
        name = GetClassName();
    }
}

public class SomeOtherClass
{
    Foo className = new Foo();
    Console.WriteLine(foo.name);
}

结果,我希望它写成: "className"

不,那是不可能的。 如果不使用参数,则无法传递变量名称。

这是您可以获得的最接近的:

Foo className = new Foo(nameof(className));

这听起来很奇怪。 变量不过是对对象的引用。 该引用的名称具有绝非什么做什么这个变量引用。 因此,实际引用的对象对其引用一无所知。 实际上,您甚至可能对同一Foo实例具有多个引用。 那么实例如何知道您要引用哪个变量? 因此,以下示例将发生什么:

var f = new Foo();
var b = f;

现在,您具有两个对Foo的相同实例的引用。 实例无法知道哪个软管是正确的,除非您通过使用参数(例如,向构造函数) 提供该信息。 如果您有一个工厂创建Foo实例,情况将变得更糟:

void CreateFoo()
{
    return new Foo();
}
// ...
var f = CreateFoo();

现在您有了进一步的间接调用, Foo的构造函数肯定不会在调用堆栈中的所有层都冒泡,直到达到某些分配才能获得实际名称为止。 实际上,您甚至可能没有为任何实例分配实例-尽管这只是一个好主意:

CreateFoo();  // create an instance and throw it away

无论如何,如果要将实例的成员设置为某个值,则应将该值提供给实例。 帕特里克(Patrick)的答案向您展示了如何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM