如何访问实现接口的类的其他方法

时间:2015-03-19 18:58:00

标签: c#

如下面的代码所示,我创建了Sample类,它实现了IPrint接口的Print方法,并且还有其他SampleTest方法。在主要部分中,我创建Sample类的对象并将其分配给接口。但是,如果我想访问SampleTest方法该怎么办。

此代码还有什么想法?是否可以实现SampleTest附加方法并从main调用它?


interface IPrint
{
    void Print();
}

class Sample : IPrint
{
    public void Print()
    {
        Console.WriteLine("Print...");
    }

    public void SampleTest()
    {
        Console.WriteLine("SampleTest...");
    }
}

class Program
{
    static void Main(string[] args)
    {
        IPrint print = new Sample();
        print.Print();
        // How would I access SampleTest methos of Sample class here
    }
}

2 个答案:

答案 0 :(得分:1)

接口的目标是提供一个合同来处理实现此接口的类。这样做的好处 - 你不关心具体的实现。

因此,虽然您的界面IPrint不包含SampleTest()方法,但您无法从类型为IPrint的对象访问它。

唯一的办法是将对象转换为Sample类,如前所述,但我认为这将是糟糕的设计,因为你回到了具体的实现。

如果您需要在打印过程中执行一些其他操作,请考虑从SampleTest()方法调用Print()方法。这样,您的main()仍然不关心现在使用哪台打印机。

答案 1 :(得分:0)

由于object属于sample类型,并且您已分配给IPrint,因此除非将print对象强制转换为Sample,否则无法访问SampleTest。这应该有效:

((Sample)print).SampleTest();