我有以下C#模型(理论示例):
public class Filename
{
public string Name { get; set; }
public string Description { get; set; }
}
namespace Protobuf // Auto-generated
{
public class Filename
{
public string Name { get; set; }
public string Description { get; set; }
}
}
我希望能够使用一个简单的方法将'Filename'类型转换为'Protobuf.Filename'类型。
现在我也知道Rust了。在这种情况下,我会在Rust中创建一个trait,并在'Filename'类型上实现它,如下所示:
trait ToProto<TProto> {
fn to_proto(&self) -> TProto;
}
impl ToProto<protobuf::Filename> for Filename {
fn to_proto(&self) -> protobuf::Filename {
protobuf::Filename {
format_string: self.format_string,
description: self.description,
}
}
}
据我所知,Swift中的协议和扩展也可能有类似的情况。
我想在C#中使用接口和扩展方法,但它们似乎不能很好地相互配合。例如,这不是有效的C#:
public interface IProtoConvertible<T, TProto>
{
public TProto ToProto(this T value);
}
我可以全部省略接口,只使用扩展方法,但这会导致大量重复的代码,这些代码会尖叫着“这可以更通用!”。
我是不是忽略了什么?这在C#中可能吗?
先谢谢你了。
1条答案
按热度按时间6jjcrrmo1#
也许你需要这样的东西:
从C# 8.0开始,可以在接口方法中编写实现。