获取对象的名字,我有:C#通过实例
class A
{
public object obj1 {get;set;}
public object obj2 {get;set;}
public object obj3 {get;set;}
}
带我去OBJ2,例如实例。 我如何得到它的名称(“obj2”)而不使用类A或实例A?
获取对象的名字,我有:C#通过实例
class A
{
public object obj1 {get;set;}
public object obj2 {get;set;}
public object obj3 {get;set;}
}
带我去OBJ2,例如实例。 我如何得到它的名称(“obj2”)而不使用类A或实例A?
要做到这一点没有A级的情况下,你必须修改你的属性类型:
class A
{
private B obj1, obj2;
public B Obj1
{
get { return obj1; }
set
{
if (value != null && value.Owner != null)
throw new ArgumentException();
if (obj1 != null)
obj1.Owner = null;
obj1 = value;
obj1.Owner = "Obj1";
}
}
public B Obj2
{
get { return obj2; }
set
{
if (value != null && value.Owner != null)
throw new ArgumentException();
if (obj2 != null)
obj2.Owner = null;
obj2 = value;
obj2.Owner = "Obj2";
}
}
}
class B
{
public string Owner { get; internal set; }
// ...
}
唯一的办法就是跟踪A级的构建过程,例如:
public class Container
{
Dictionary<string, object> _objectContainer;
public Container()
{
_objectContainer = new Dictionary<string, object>();
}
public void SetByName(string name, object obj)
{
if(!_objectContainer.ContainsKey(name))
{
_objectContainer.Add(name, obj);
}
else
{
_objectContainer[name] = obj;
}
}
public object GetByName(string name)
{
return _objectContainer[name];
}
}
public class ABuilder
{
public static A Build(Container container)
{
var a = new A();
var obj1 = new object();
var obj2 = new object();
var obj3 = new object();
container.SetByName("obj1", obj1);
container.SetByName("obj2", obj2);
container.SetByName("obj3", obj3);
a.Obj1 = obj1;
a.Obj2 = obj2;
a.Obj3 = obj3;
return a;
}
}
class Program
{
static void Main(string[] args)
{
var container = new Container();
var obj = ABuilder.Build(container);
var obj1 = container.GetByName("obj1");
}
}
你是什么意思“某处我有obj2的实例”?你能显示一些代码吗? –
你的名字是什么意思?假设obj1,2和3都是同一个对象名字是什么?它是“obj1”还是“obj3”?您可以使用反射来获取其值等于某个对象的任何字段的字段名称。但这不是它的名字,也不是唯一的。这是你想要的吗? –
例如我调用另一个类的方法并发送obj2作为参数。 obj1,obj2,obj3一个类的不同实例 – Famos