C# 使用泛型类而不指定类型

发布于 2024-12-07 22:41:13 字数 409 浏览 0 评论 0原文

我有一个这样创建的通用类:

public abstract class MyClass<T>
{
    public T Model
    {
        get;
        protected set;
    }        
}

在我的代码中的某个时刻,我想对 MyClass 类型的任何内容执行某些操作。比如:

private void MyMethod(object param)
{
    myClassVar = param as MyClass;
    param.Model....etc
}

这可能吗?或者我是否需要使 MyClass 成为某个东西的子类(MyClassBase)或实现一个接口(IMyClass)?

I have a generic class I have created as so:

public abstract class MyClass<T>
{
    public T Model
    {
        get;
        protected set;
    }        
}

And at some point in my code I want to do something with anything of MyClass type. Something like:

private void MyMethod(object param)
{
    myClassVar = param as MyClass;
    param.Model....etc
}

Is this possible? Or do I need to make MyClass be a subclass of something (MyClassBase) or implement an interface (IMyClass)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷弦 2024-12-14 22:41:13

我相信您需要的是使 MyMethod 方法通用并对其类型参数添加约束:

interface IMyInterface
{
    void Foobar();
}

class MyClass<T>
{
    public T Model
    {
        get;
        protected set;
    }
}

private void MyMethod<T>(MyClass<T> param) where T : IMyInterface
{
    param.Model.Foobar();
}

I believe what you are need is to make MyMethod method generic and add constraint on its type parameter:

interface IMyInterface
{
    void Foobar();
}

class MyClass<T>
{
    public T Model
    {
        get;
        protected set;
    }
}

private void MyMethod<T>(MyClass<T> param) where T : IMyInterface
{
    param.Model.Foobar();
}
心如狂蝶 2024-12-14 22:41:13

不可以。

您需要继承非泛型基类或实现非泛型接口。

请注意,您将无法使用 Model 属性,因为它不能具有类型(除非您将其限制为基类型并显式实现非类型化属性)。

No.

You need to inherit a non-generic base class or implement a non-generic interface.

Note that you won't be able to use the Model property, since it cannot have a type (unless you constrain it to a base type and implement an untyped property explicitly).

清君侧 2024-12-14 22:41:13

是的,你需要。如果泛型类的类型未定义,您需要创建泛型接口或使用基类...

Yes, you need. If type of generic class is undefined you need to create generic interface or using base-class...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文