Resharper为此代码说参数可以用基类型声明,我该如何解决这个问题,以及有什么好处?我对C#很新,很抱歉,如果我错过了一些基本的概念..
IEnumerator RemoveGameObject(float waitTime, GameObject go) {
yield return new WaitForSeconds(waitTime);
Destroy(go);
}
我看过this thread,但我不理解..也许我需要阅读基础类型..
答案 0 :(得分:2)
这是基于最佳实践,设计指南和编程原则的建议。
在创建和决定方法的参数类型时,应使用满足方法执行其作业所需的最低要求的参数类型。您将使用满足这些要求的接口,或者满足这些要求的继承链中的最低类。
在您的示例中,方法" 销毁(p) "似乎只使用不仅存在于 GameObject 中的属性或方法,而且还使用其基类型(它继承自的类)。 "的 销毁(p)的 强>"不需要"额外的东西" GameObject 带来了它。所以通过使用 GameObject 的基础,它满足" Destroy(p) "需要履行其职责,您允许从该基础派生的任何类也能够作为参数传递给" 销毁(p) & #34;
一个例子: 考虑一下这段代码(可能不是最好的,但应该这样做)
public class Animal
{
public void Eat(Food food) { }
public void Breath() { }
}
public class Dog : Animal
{
public void Bark() { }
}
public class Human : Animal
{
public void Speak() { }
}
现在我创建一个类似的方法:
public void PerformLifeDuties(Human joe, Food food)
{
joe.Eat(food);
joe.Breath();
}
我只限制了我的代码。现在我无法传递 动物 , Dog 或任何派生类型的 动物 ,我只能传递 Human 。尽管该方法的唯一要求是 Animal ,但我可以调用 eat 和的 呼吸 即可。更好的方法是使参数 Animal 。
public void PerformLifeDuties(Animal animal, Food food)
{
animal.Eat(food);
animal.Breath();
}
现在我可以将此方法用于 人类 , Dog 和派生类型。如果我的方法需要让 动物 发言,那么我至少需要指定 Human
来自微软的页面:
✓使用提供的最少派生参数类型 会员要求的功能。
您可以在此处查看Microsoft的一些C#设计指南:Parameter Design