gpt4 book ai didi

c# - 使用动态类型而不是不可能的通用属性

转载 作者:太空狗 更新时间:2023-10-29 21:58:15 24 4
gpt4 key购买 nike

考虑以下代码:

    public dynamic DataGrid { get; private set; }
public DataGridForm<TData, TGrid> GridConfig<TData, TGrid>() where TData : class
{
return DataGrid = new DataGridForm<TData, TGrid>();
}

我试图在 property 中保留一个泛型类的实例供以后使用,但如您所知:

Properties, events, constructors etc can't be generic - only methods and types can be generic. Most of the time that's not a problem, but I agree that sometimes it's a pain (Jon Skeet)

我想知道这是解决这种情况的好方法吗?

最佳答案

如评论中的答案所示,您可以使用基类或接口(interface)执行此操作:

class DataGridForm {}
class DataGridForm<TData, TGrid> : DataGridForm {}

class GridConfigurator
{
public DataGridForm DataGrid { get; private set; }
public DataGridForm<TData, TGrid> GridConfig<TData, TGrid>() where TData : class
{
return DataGrid = new DataGridForm<TData, TGrid>();
}
}

在添加泛型时,C# 中的大量类型和接口(interface)都以这种方式扩展。但是,我可能会重新评估您的设计,以便可能调用 GridConfig() 的任何东西都在缓存 DataGridForm,因为它知道类型。例如,我在我的代码中做了一件非常相似的事情:

class Vector<T> { ... }
static class Vector
{
public static Vector<T> Create<T>(T value)
{
return new Vector<T>(value);
}
}

class OtherClass
{
public static Vector<int> MyVector = Vector.Create(1);
}

不过,您的特定用例可能不支持这种风格。

关于c# - 使用动态类型而不是不可能的通用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835413/

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