2016-07-07 47 views
0

我有以下几点:内部接口通入干燥违反

internal class Person { 
} 

internal interface IGetPerson { 
    Person GetPerson(); 
} 

public class Cat: IGetPerson { 
    private Person _Person = new Person(); 

    Person IGetPerson.GetPerson() { 
    return _Person; 
    } 

    internal Person GetPerson() { // dry violation -- necessary? 
    return _Person; // or return (this as IGetPerson).GetPerson();  
    } 
} 

这似乎是必要得到以下编译,没有“为”铸:

internal class SomeClass { 
    public static Person GetPerson(Cat someCat) { 
    return someCat.GetPerson(); 
    } 
} 

的结果是除非我错过了某些东西,否则采用内部接口将不可避免地导致这种干扰。另一种方法是公开Person类。

我错过了什么吗?

+0

为什么修复不能“使用'作为'cast”? –

+0

取决于用例,它可能是。它只是觉得愚蠢。 –

回答

0

在这种情况下,您实际上并不需要两种方法。只要拿出“IGetPerson”。 (包括点)从第一个覆盖,然后拿出第二个方法。 如果您使用VS 2015的快速操作,请尝试选择“实现接口”而不是“显式实现接口”。

+0

不会建立。问题在于GetPerson必须公开才能实现接口,但不能公开,因为Person不是公共的。 –

+0

我明白了。你可以让接口成为一个静态类,所以它可以有内部成员,公开“人员”,让猫内部,或按照你的建议做。在这种情况下,干违规并不重要,因为它只是一个简单的行,我不会担心太多。 – mousetail