好的,昨天我正在扫描一些代码,我看到了这个,
码:
public class MyBaseClass
{
public string Field0()
{
return string.Empty;
}
}
public class MyClass : MyBaseClass
{
public string Field1()
{
return String.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
非常简单没有抱怨.在主代码中,
码:
private void Form1_Load(object sender, EventArgs e)
{
}
private MyBaseClass GetSomthing()
{
var retVal = new MyClass();
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
现在这个代码编译正确,即使函数GetSomthing()的返回类型为MyBaseClass,它实际上允许返回MyClass(我假设这是因为继承).
我在somone elses代码中发现了这个,对我来说这看起来很糟糕,虽然我可能会遗漏某些东西,但是有人有任何想法吗?
为什么练习不好?那绝对没问题.例如,您可能需要:
public IEnumerable<string> GetNames()
{
return new List<string> { "Fred", "Jon", "Joe" };
}
Run Code Online (Sandbox Code Playgroud)
它非常有意义从一个角度封装点-你分离界面的什么你愿意,以保证给调用者(这将是一个字符串的序列)从执行(你正在使用List<string>).这使您可以在不影响调用者的情况下更改实现.
这是一种很好的做法,而不是糟糕的做法.