具有动态类型的 C# 接口/抽象类

发布于 2024-10-09 04:36:01 字数 414 浏览 4 评论 0原文

我正在编写一系列基于数学的类,每个类都继承自一个抽象类。我希望我的抽象类有一个名为“参数”的 getter 和 setter。

public abstract dynamic Parameters {get; set;}

然后在每个单独的数学课中,我想实现具有某种类型的参数:

如果该类需要一个句点,我会这样做:

public override IPeriod Parameters {get; set;}

这不会编译。显然我可以将返回类型更改为动态并且它会起作用,但随后我会失去智能感知。有没有一种标准方法可以在不丢失智能感知的情况下做到这一点?

每个类都会有一个参数 {get; set;} 但它们会是不同的类型。从抽象类中删除参数是否更好?

I'm writing a series of math based class that each inherit from an abstract class. I want my abstract class to have a getter and setter called Parameters.

public abstract dynamic Parameters {get; set;}

Then in each individual math class I want to implement Parameters with a certain type:

If the class requires a period I would do it like this:

public override IPeriod Parameters {get; set;}

This doesn't compile. Obviously I could change the return type to dynamic and it would work, but then I lose intellisense. Is there a standard way of doing this without losing intellisense?

Every one of the class will have a Parameters {get; set;} but they will be up a different type. Is it better just to eliminate Parameters from the abstract class?

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

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

发布评论

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

评论(2

过期情话 2024-10-16 04:36:01

是的,使用泛型..

public MyAbstractBaseClass<T>
{
    public abstract T Parameters {get; set;}
}

然后您可以继承指定将用于参数的类型,例如..

public PeriodClass : MyAbstractBaseClass<IPeriod>
{
    public override IPeriod Parameters {get; set;}
}

Yes, use generics..

public MyAbstractBaseClass<T>
{
    public abstract T Parameters {get; set;}
}

then you can inherit specifying the type that will be used for the param like..

public PeriodClass : MyAbstractBaseClass<IPeriod>
{
    public override IPeriod Parameters {get; set;}
}
半葬歌 2024-10-16 04:36:01

如果将参数设置为泛型,则可以返回所需的任何类型:

public abstract T Parameters<T> {get; set;}

If you make parameters a generic, you can return whatever type you want:

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