对于一组都实现相同接口(interface)的类,假设一个或多个类具有不属于接口(interface)定义的附加方法。当我创建这些对象时,使用接口(interface)有没有办法访问这些方法?还是我必须在不使用界面的情况下创建每个单独的对象?
class Program
{
static void Main(string[] args)
{
ITextProcessor processor = new FileProcessor();
string result = processor.ReadText();
processor.SaveText(result);
ITextProcessor processorTest = new FileProcessorTest();
processorTest.testMethod() // unavailable
}
}
class FileProcessor : ITextProcessor
{
public string ReadText()
{
// read in text from a
// file and return it
return Console.ReadLine();
}
public void SaveText(string processedText)
{
// write processedText out to file.
Console.WriteLine(processedText);
}
}
class FileProcessorTest : ITextProcessor
{
public string ReadText()
{
// read in text from a
// file and return it
return Console.ReadLine();
}
public void SaveText(string processedText)
{
// write processedText out to file.
Console.WriteLine(processedText);
}
public void testMethod()
{
//I want to be able to access this method
}
}
interface ITextProcessor
{
string ReadText();
void SaveText(string processedText);
}
最佳答案
你不能 - 使用接口(interface)的全部意义在于你知道每个实现者都有每个方法,除非声明它,否则你不可能知道通过界面。
您可以通过尝试转换为具体实现之一并在成功时调用该方法来绕过它;然而,这也违背了这一点,因为接口(interface)应该从使用它们的类中抽象出这些具体实现(并且这不会是“仍在为接口(interface)编程”)。
考虑一下:如果使用接口(interface)的类需要将其用于接口(interface)中未声明的内容,那么使用的接口(interface)是否正确?
您可能会考虑的一件事是,您的调用类可能需要的不仅仅是这个接口(interface)。也许它需要其中之一:
public interface ITestableTextProcessor : ITextProcessor
{
void TestMethod();
}
public class FileProcessorTest : ITestableTextProcessor {...}
当然,这是否合适(甚至可行)取决于您使用它做什么。
关于c# - 如何访问不属于接口(interface)定义的方法? (同时仍在为接口(interface)编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230547/