c# 像委托方法一样传递内联接口
c# passing inline interface like delegate method
i',m 在 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?
重新设计的一种方法是接受两个 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");
}
但是有一个具体的 class 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 中可以做的事情。
i',m 在 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?
重新设计的一种方法是接受两个 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");
}
但是有一个具体的 class 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 中可以做的事情。