如下面的代码所示,我创建了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
}
}
答案 0 :(得分:1)
接口的目标是提供一个合同来处理实现此接口的类。这样做的好处 - 你不关心具体的实现。
因此,虽然您的界面IPrint
不包含SampleTest()
方法,但您无法从类型为IPrint
的对象访问它。
唯一的办法是将对象转换为Sample
类,如前所述,但我认为这将是糟糕的设计,因为你回到了具体的实现。
如果您需要在打印过程中执行一些其他操作,请考虑从SampleTest()
方法调用Print()
方法。这样,您的main()
仍然不关心现在使用哪台打印机。
答案 1 :(得分:0)
由于object属于sample类型,并且您已分配给IPrint,因此除非将print对象强制转换为Sample,否则无法访问SampleTest。这应该有效:
((Sample)print).SampleTest();