Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参数可以用基类型声明_C#_Unity3d - Fatal编程技术网

C# 参数可以用基类型声明

C# 参数可以用基类型声明,c#,unity3d,C#,Unity3d,Resharper说,对于这段代码,参数可以用基类型声明,我该如何解决这个问题,其好处是什么?我对C#很陌生,如果我错过了一些基本概念,我很抱歉 IEnumerator RemoveGameObject(float waitTime, GameObject go) { yield return new WaitForSeconds(waitTime); Destroy(go); } 我读了,但不明白。。也许我需要阅读基本类型。这是一个基于最佳实践、设计指南和编程原则的建议 创建

Resharper说,对于这段代码,参数可以用基类型声明,我该如何解决这个问题,其好处是什么?我对C#很陌生,如果我错过了一些基本概念,我很抱歉

IEnumerator RemoveGameObject(float waitTime, GameObject go) {
    yield return new WaitForSeconds(waitTime);
    Destroy(go);
}

我读了,但不明白。。也许我需要阅读基本类型。

这是一个基于最佳实践、设计指南和编程原则的建议

创建和决定方法的参数类型时,应使用满足方法执行其工作所需的最低要求的参数类型。您将使用满足这些要求的接口,或继承链中满足这些要求的最低类

在您的示例中,方法“Destroy(p)”似乎只使用属性或方法,这些属性或方法不仅存在于游戏对象中,而且还存在于其基本类型(它从中继承的类)中。“Destroy(p)”不需要GameObject附带的“额外物品”。因此,通过使用满足“销毁(p)”执行其职责所需的最低要求的游戏对象的基础,您可以允许从该基础派生的任何类也获得作为参数传递到“销毁(p)”的能力

例如: 考虑这个代码(可能不是最好的,但应该做的)

现在我创建了一个如下的方法:

 public void PerformLifeDuties(Human joe, Food food)
{
    joe.Eat(food);
    joe.Breath();
}
我只是限制了我的代码。现在我不能通过动物、狗
或任何衍生类型的动物,我只能通过人类。尽管该方法的唯一要求是它是动物,因此我可以调用呼吸。更好的方法是将参数设置为Animal

 public void PerformLifeDuties(Animal animal, Food food)
{
    animal.Eat(food);
    animal.Breath();
}
现在我可以将此方法用于人类和派生类型。如果我的方法需要让动物说话,那么我至少需要指定人类

从Microsoft的页面:

✓ 请使用提供 成员所需的功能


你可以在这里查看一些微软的C#设计指南:

事实是,你不会赢得任何“用基类型声明它”的东西,所以就忽略它吧。我无论如何都不会使用resharper:pduplicate:好的,谢谢,我会将该警告设置为忽略。我认为resharper在很大程度上帮助我清理代码,提醒我使用switch语句和三元if语句,以及未使用的参数。“我如何修复”没有什么需要“修复”的,但是您可以按照建议使用基类型。Resharper不是为你提供了一个选项吗?谢谢,我会尽快检查并接受你的答案。我刚刚注意到你是同一本书的作者。其推理与@sparkplug的建议相同——与Hamzavi的建议相反。编程到接口或最低类。一般的经验法则。太好了,读了几遍,但还是有道理的。当第一次制作游戏时,更多的是先做,后想,这会产生这样的问题:)这些例子太完美了!很高兴这有帮助。第二个循环是设计的一部分。即使是三分之一或四分之一也不会受伤。
 public void PerformLifeDuties(Animal animal, Food food)
{
    animal.Eat(food);
    animal.Breath();
}