c# - 如何访问不属于接口(interface)定义的方法? (同时仍在为接口(interface)编程)

标签 c# .net

对于一组都实现相同接口(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/

相关文章:

c# - 使用多列过滤 DataView

c# - 使用多个监视器恢复窗口大小/位置

c# - 执行 ChartImg.axd 的子请求时出错。这不是重复的

.net - 无法加载 .Net 程序集

c# - 使用 IEnumerable 检测修改

c# - 转换为计算/绝对位置

c# - 使用命令行参数从 C# 运行 Python 脚本

c# - MSChart 如何更改一系列破折号之间的间距

.net - 默认情况下如何在IIS 7.5中将新站点设置为.NET 4

.net - 在 WPF 中区分选择和拖动