有没有办法收集(例如在List中)不共享一个共同超类的多个"通用"对象?如果是这样,我如何访问他们的共同属性?
例如:
class MyObject<T>
{
public T Value { get; set; }
public string Name { get; set; }
public MyObject(string name, T value)
{
Name = name;
Value = value;
}
}
var fst = new MyObject<int>("fst", 42);
var snd = new MyObject<bool>("snd", true);
List<MyObject<?>> list = new List<MyObject<?>>(){fst, snd};
foreach (MyObject<?> o in list)
Console.WriteLine(o.Name);
Run Code Online (Sandbox Code Playgroud)
显然,这是伪代码,这不起作用.
此外,我不需要访问.Value属性(因为这不是类型安全的).
编辑:既然我一直在考虑这个问题,那么可以使用子类.但是,我认为这意味着我必须为每个新类型编写一个新的子类.
@ Grzenio 是的,这完全回答了我的问题.当然,现在我需要复制整个共享接口,但这不是一个大问题.我应该想到这个......
@ aku 你对鸭子打字是正确的.我不希望可以访问两个完全随机类型的对象.
但我认为通用对象会共享某种通用接口,因为它们完全相同,除了它们被参数化的类型.显然,情况并非如此.
我认为在C#中不可能,因为MyObject不是MyObject的基类.我通常做的是定义一个接口(一个'普通',不通用),并让MyObject实现该接口,例如
interface INamedObject
{
string Name {get;}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用界面:
List<INamedObject> list = new List<INamedObject>(){fst, snd};
foreach (INamedObject o in list)
Console.WriteLine(o.Name);
Run Code Online (Sandbox Code Playgroud)
它回答了你的问题吗?
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |