I',m using this syntax in java.I'm new at c#oding.How can I implement that structure in c#? Does c# support inline instance interface as java?
public interface Interaction
{
void onSuccess(String result);
void onFailure(String error);
}
void getData(Interaction interaction)
{
//someCode
interaction.onSuccess("foo");
}
void main()
{
getData(new Interaction()
{
@override
void onSuccess(String result)
{
//here is sucess part
}
@override
void onFailure(String error)
{
//here is failure part
}
})
}
我是c#编码的新手,如何在c#中实现这个结构? c#是否像java一样支持inline实例接口?
重新设计的一种方法是接受两个 Action<string>
的参数。
void GetData(Action<string> onSuccess, Action<string> onFailure)
{
//someCode
onSuccess("foo");
}
void Main()
{
GetData(onSuccess: result => {
// success part...
}, onFailure: error => {
// failure part
});
}
另一种方法是保持 IInteraction
接口。
public interface IInteraction
{
void OnSuccess(String result);
void OnFailure(String error);
}
void GetData(IInteraction interaction)
{
//someCode
interaction.OnSuccess("foo");
}
但有一个具体的类 GenericInteraction
实现 IInteraction
:
class GenericInteraction : IInteraction {
private Action<string> onSuccess;
private Action<string> onFailure;
public GenericInteraction(Action<string> onSuccess, Action<string> onFailure) {
this.onSuccess = onSuccess;
this.onFailure = onFailure;
}
public void OnSuccess(String result) { onSuccess(result); }
public void OnFailure(String error) { onFailure(error); }
}
这样,方法的调用者可以选择传入 onSuccess
和 onFailure
"inline"。
GetData(new GenericInteraction(onSuccess: result => {
// success part...
}, onFailure: error => {
// failure part
}));
或者通过其他东西来实现 IInteraction
:
GetData(someOtherInteractionICreated);
这更接近于你在Java中可以做的事情。