[英]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.