目标:
根据接口自动生成C#代码
问题:
当接中定义的方法参数带"out,ref,params"等声明时代码如何生成?//处理"接口方法代码生成"的代码片段//Type IInterface = Type.ReflectionOnlyGetType("Temp.IInterfaceTest,Temp.InterfaceTest", true, true);
//CodeTypeMemberCollection pcodeMethods = new CodeTypeMemberCollection();
//foreach (MethodInfo methodInfo in IInterface.GetMethods())CodeMemberMethod pcodeMemberMethod = new CodeMemberMethod();
pcodeMethods.Add(pcodeMemberMethod);
pcodeMemberMethod.Attributes = MemberAttributes.Public;
pcodeMemberMethod.Name = methodInfo.Name;
pcodeMemberMethod.ReturnType = new CodeTypeReference(methodInfo.ReturnType.Name);
//处理泛型定义
if (methodInfo.IsGenericMethod)
{
Type[] genericArguments = methodInfo.GetGenericArguments();
for (int i = 0; i < genericArguments.Length; i++)
{
pcodeMemberMethod.TypeParameters.Add(genericArguments[i].Name);
}
}
//处理方法参数
foreach (ParameterInfo paramsInfo in methodInfo.GetParameters())
{
CodeParameterDeclarationExpression pcodeParams =
new CodeParameterDeclarationExpression(
new CodeTypeReference(paramsInfo.ParameterType.Name),
paramsInfo.Name
);
if(paramsInfo.IsIn) pcodeParams.Direction = FieldDirection.In;
if (paramsInfo.IsOut) pcodeParams.Direction = FieldDirection.Out; pcodeMemberMethod.Parameters.Add(pcodeParams);
}
//添加语句
------------------------------------------------------------
执行以上代码
输入:
public interface IInterfaceTest<T>
{
[System.Web.Services.WebMethod]
S test<K,S>(K k,T t);
string text();
string kk{set;}
string xx(T[] t);
string[] aa(T[] t,ref T a,out int w,params T[] x);
}
输出:
public class InterfaceTest<T> : IInterfaceTest<T>, System.Web.Services.WebService
{
public InterfaceTest() {
}
public virtual S test<K, S>(K k, T t)
{
}
public virtual String text() {
}
public virtual String xx(T[] t) {
}
public virtual String[] aa(T[] t, T& a, out Int32& w, T[] x) {
}
}
-------------------------------------
生成的代码与预期的不一样,主要是参数定义那部分请问哪位大侠能指点下,先谢了..........
根据接口自动生成C#代码
问题:
当接中定义的方法参数带"out,ref,params"等声明时代码如何生成?//处理"接口方法代码生成"的代码片段//Type IInterface = Type.ReflectionOnlyGetType("Temp.IInterfaceTest,Temp.InterfaceTest", true, true);
//CodeTypeMemberCollection pcodeMethods = new CodeTypeMemberCollection();
//foreach (MethodInfo methodInfo in IInterface.GetMethods())CodeMemberMethod pcodeMemberMethod = new CodeMemberMethod();
pcodeMethods.Add(pcodeMemberMethod);
pcodeMemberMethod.Attributes = MemberAttributes.Public;
pcodeMemberMethod.Name = methodInfo.Name;
pcodeMemberMethod.ReturnType = new CodeTypeReference(methodInfo.ReturnType.Name);
//处理泛型定义
if (methodInfo.IsGenericMethod)
{
Type[] genericArguments = methodInfo.GetGenericArguments();
for (int i = 0; i < genericArguments.Length; i++)
{
pcodeMemberMethod.TypeParameters.Add(genericArguments[i].Name);
}
}
//处理方法参数
foreach (ParameterInfo paramsInfo in methodInfo.GetParameters())
{
CodeParameterDeclarationExpression pcodeParams =
new CodeParameterDeclarationExpression(
new CodeTypeReference(paramsInfo.ParameterType.Name),
paramsInfo.Name
);
if(paramsInfo.IsIn) pcodeParams.Direction = FieldDirection.In;
if (paramsInfo.IsOut) pcodeParams.Direction = FieldDirection.Out; pcodeMemberMethod.Parameters.Add(pcodeParams);
}
//添加语句
------------------------------------------------------------
执行以上代码
输入:
public interface IInterfaceTest<T>
{
[System.Web.Services.WebMethod]
S test<K,S>(K k,T t);
string text();
string kk{set;}
string xx(T[] t);
string[] aa(T[] t,ref T a,out int w,params T[] x);
}
输出:
public class InterfaceTest<T> : IInterfaceTest<T>, System.Web.Services.WebService
{
public InterfaceTest() {
}
public virtual S test<K, S>(K k, T t)
{
}
public virtual String text() {
}
public virtual String xx(T[] t) {
}
public virtual String[] aa(T[] t, T& a, out Int32& w, T[] x) {
}
}
-------------------------------------
生成的代码与预期的不一样,主要是参数定义那部分请问哪位大侠能指点下,先谢了..........
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货