从函数返回不正确的类型

Lia*_*amB 0 c# inheritance

好的,昨天我正在扫描一些代码,我看到了这个,

码:

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代码中发现了这个,对我来说这看起来很糟糕,虽然我可能会遗漏某些东西,但是有人有任何想法吗?

Jon*_*eet 7

为什么练习不好?那绝对没问题.例如,您可能需要:

public IEnumerable<string> GetNames()
{
    return new List<string> { "Fred", "Jon", "Joe" };        
}
Run Code Online (Sandbox Code Playgroud)

它非常有意义从一个角度封装点-你分离界面的什么你愿意,以保证给调用者(这将是一个字符串的序列)从执行(你正在使用List<string>).这使您可以在不影响调用者的情况下更改实现.

这是一种很好的做法,而不是糟糕的做法.