gpt4 book ai didi

c# - 有没有更好的方法来过滤可以传递给继承类的构造函数的对象类型?

转载 作者:行者123 更新时间:2023-11-30 19:33:41 25 4
gpt4 key购买 nike

我知道标题有点啰嗦,但我不知道还能怎么问这个问题。这基本上就是我用来过滤传递给继承类的对象类型的技术。先看看代码,我会解释更多...

public interface IProjectile {}
public interface IPaintBall : IProjectile {}
public interface IPotato : IProjectile {}

public class Prop
{
public void Shoot(params IProjectile[] projectiles)
{
// logic goes here...
}
}

public class Car : Prop
{
public override void Shoot(params IPaintBalls[] paintBalls)
{
base.Shoot(paintBalls);
}
}

看到了吗?我不想让你用土 bean 来砸我的车。你只能用彩弹射击它。那我这样做是对的吗?同样,当 Prop 类有大约 100 个函数时,这会变得更加复杂,我也想过滤掉这些函数,只剩下彩弹。我不想为 Car 类写出那 100 多个函数,对吧?我特别不想为我将要编写的 100 多个 Car 类写出这 100 多个函数。

我说得够清楚了吗?

这只是一个例子。我不是在做游戏编程或类似的事情。我只是想给你们一个非常简单的例子来传达我在这里想要的东西。基本上,如果有人试图将土 bean 传递给 Car 的 Shoot() 函数,我不希望代码编译。

最佳答案

我可能会做的是让 Prop 接受通用类型。即:

public class Prop<T> where T : IProjectile
{
public virtual void Shoot(params T[] projectiles)
{
// logic goes here...
}
}

public class Car : Prop<IPaintBall>
{
public override void Shoot(params IPaintBall[] projectiles)
{
base.Shoot(projectiles);
}
}

然后这些方法作为 PaintBalls 公开给 Car 类的用户,即:

Car car = new Car();
car.Shoot(somePaintballs); // Shoot will only take IPaintBall.

然后你也可以有一个非通用的 Prop 类:

public class Prop : Prop<IProjectile>
{
}

您仍然可以使用的地方:

public class Person : Prop
{
}

Person 可以用任何 IProjectile 射击,包括 IPotato

关于c# - 有没有更好的方法来过滤可以传递给继承类的构造函数的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3235413/

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