您如何在实时场景中实现界面?
这是我的情况
我已经创建了一个具有2个方法的接口IPayPal
void SaleTransaction();
void VoidTransaction();
现在我有一个PayPal类来实现这项服务。
class PayPal:IPayPal{
public void SaleTransaction(){
// Implementation happens here
}
public void VoidTransaction(){
// Implementation happens here
}
}
现在我有一项服务从PayPal请求服务
让我们说
class Service{
IPayPal pp=null;
static void Main(){
pp=new PayPal();
//Now i do not want to expose all the methods in my class PayPal
// is there any other way to just show pp.SaleOneTransaction() method?? i donot want the //PayPal class to be present in this Program..
//Please tell me how to acheive this.
}
}
即请告诉我一种方法,我可以初始化我的接口类,而不会泄露实现接口的类。
由于
答案 0 :(得分:2)
两个选项:
不要简单地公开您不希望从其他程序集调用的公共方法。不要公开您不希望从程序集中的其他类调用的内部方法。
创建一个代理所有调用的包装器:
public class PaymentProxy : IPayPal
{
private readonly IPayPal original;
public PaymentProxy(IPayPal original)
{
this.original = original;
}
public void SaleTransaction()
{
original.SaleTransaction();
}
public void VoidTransaction()
{
original.VoidTransaction();
}
}
此时,您可以使用原始“秘密”对象创建PaymentProxy
,相信不泄漏有关它的信息,并将代理交给任何人。当然,这对于反射等是不安全的 - 但它确实隐藏了防止实现细节被“意外地”用于快速和肮脏,“嗯,我知道它真的是PayPal
,所以让我们加入......“黑客。
答案 1 :(得分:2)
我建议:
答案 2 :(得分:0)
您可以将2个方法分成2个接口。
interface IPayPal1{
void SaleTransaction();
}
interface IPayPal2{
void VoidTransaction();
}
class PayPal:IPayPal1, IPayPal2{
void SaleTransaction(){
//
}
void VoidTransaction(){
//
}
}
class Service{
IPayPal1 pp=null;
static void Main(){
pp=new PayPal(); //you cannot access VoidTransaction here
}
}