A C# Visitor pattern interface generator with C# 9.0 Source Generator
from Nuget
Use an VisitTo
attribute to generate "Visit" method.
public interface INode {}
public interface IChildNodeA : INode {}
public interface IChildNodeB : INode {}
public interface IChildNodeC : INode {}
[VisitTo(typeof(IChildNodeA))]
[VisitTo(typeof(IChildNodeB))]
[VisitTo(typeof(IChildNodeC))]
public partial interface IChildNodeVisitor<T>{} // note:Template must be <T>
will generate following
public partial interface IChildNodeVisitor<T>
{
public T Visit( IChildNodeA obj );
public T Visit( IChildNodeB obj );
public T Visit( IChildNodeC obj );
}
If use an VisitDynamicFrom
, generate a type dynamic synatax code.
public interface INode {}
public interface IChildNodeA : INode {}
public interface IChildNodeB : INode {}
public interface IChildNodeC : INode {}
[VisitTo(typeof(IChildNodeA))]
[VisitTo(typeof(IChildNodeB))]
[VisitTo(typeof(IChildNodeC))]
[VisitDynamicFrom(typeof(INode))]
public partial interface IChildNodeVisitor<T>{} // note:Template must be <T>
will generate following
public partial interface IChildNodeVisitor<T>
{
public T Visit( IChildNodeA obj );
public T Visit( IChildNodeB obj );
public T Visit( IChildNodeC obj );
public T Visit( INode obj )
{
return Visit( (dynamic)obj );
}
}