gpt4 book ai didi

c# - 什么时候在 C#/.NET 中使用 'object'?

转载 作者:太空狗 更新时间:2023-10-29 20:48:30 26 4
gpt4 key购买 nike

我唯一一次尝试使用对象是 List<object>我后悔并重写了它。我永远找不到一个实例来使用对象而不是接口(interface)。什么时候在 .NET 中使用对象?

最佳答案

坦率地说,您并不经常需要它。但是当你这样做的时候,它是很明显的。反射、泛型类型转换、序列化或标记是最终包含对象的主题。

就像void*...本质上几乎是一样的。您想知道这种“粗糙”的元素有什么用,直到您最终陷入无路可退的角落,只能使用它。

这是您可以在托管代码中找到的最低级别。万物皆对象,无法深入。

通用类型转换:

public T AddComponents<T>()
{
Component component = (Component)Activator.CreateInstance(typeof(T));

if (component != null)
{
component.Parent = this;
components.Add(component);
}

return (T)(object)component; //Cannot directly cast Component to T since we have no constraint between them.
}

将项目分配给不知道内容的通用容器的想法的“标签”:

public class DragDropWrapper
{
private object tag;

public object Tag
{
get { return tag; }
}
}

拖的是什么?不知道。可以是任何东西。

或者非常常见的事件发送者:

public void Message(object sender, string text)
{
Entry entry = new Entry(sender, EntryType.Message, text);
AddEntry(entry);
}

发件人可以是任何东西。

反射扩展对象的属性:

public static List<InfoNode> ExpandObject(InfoGrid grid, InfoNode owner, object obj)
{
List<InfoNode> nodes = new List<InfoNode>();

if (obj == null)
return nodes;

PropertyInfo[] infos = obj.GetType().GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Public);

foreach (PropertyInfo info in infos)
nodes.Add(new PropertyNode(grid, owner, obj, info));

nodes = nodes.OrderBy(n => n.Name).ToList();

return nodes;
}

还有更多的可能性。

关于c# - 什么时候在 C#/.NET 中使用 'object'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com