从函数返回不正确的类型

时间:2009-10-19 09:37:17

标签: c# inheritance

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

代码:

public class MyBaseClass
    {
        public string Field0()
        {
            return string.Empty;
        }
    }

    public class MyClass : MyBaseClass
    {
        public string Field1()
        {
            return String.Empty;
        }
    }

非常简单没有抱怨。在主要代码中,

代码:

private void Form1_Load(object sender, EventArgs e)
        {

        }

        private MyBaseClass GetSomthing()
        {
            var retVal = new MyClass();
            return retVal;
        }

现在这个代码编译正确,即使函数GetSomthing()的返回类型为MyBaseClass,它实际上允许返回MyClass(我假设这是因为继承)。

我在somone elses代码中发现了这一点,对我来说这看起来很糟糕,虽然我可能会遗漏某些东西,但是有人有任何想法吗?

2 个答案:

答案 0 :(得分:7)

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

public IEnumerable<string> GetNames()
{
    return new List<string> { "Fred", "Jon", "Joe" };        
}

从封装的角度来看,它是完全合理的 - 你将接口与你愿意保证的调用者(它将是一系列字符串)从< em> implementation (你正在使用List<string>)。这使您可以在不影响调用者的情况下更改实现。

这是良好的练习,而不是糟糕的练习。

答案 1 :(得分:2)

MyClass的实例也是MyBaseClass的一个实例,因此完全有效(并且常见)...