MuzeClay 2016-09-27 02:33 采纳率: 0%
浏览 12120

C#小白求问:“扩展方法必须在非泛型静态类中定义”如何解决

using System;

namespace _02PrintMember
{
public interface IMemberExpression
{
string PrintMember(Func p);
T Obj { get; set; }
}

class MemberExpression<T> : IMemberExpression<T>
{
    private User actress;
    private Project project;
    private T _obj;


    public T Obj
    {
        get { return _obj; }
        set { _obj = value; }
    }

    T IMemberExpression<T>.Obj
    {
        get
        {
            throw new NotImplementedException();
        }

        set
        {
            throw new NotImplementedException();
        }
    }

    public MemberExpression(User actress)
    {
        this.actress = actress;
    }

    public MemberExpression(Project project)
    {
        this.project = project;
    }



    public static IMemberExpression<T> PrintMember<TP, TResult>(this IMemberExpression<T> source, Func<T, TResult> action)
    {
        TResult result = action(source.Obj);
        System.Console.WriteLine(result);
        return source;
    }

    string IMemberExpression<T>.PrintMember(Func<object, object> p)
    {
        throw new NotImplementedException();
    }
}

}
这是定义的一个接口
当我使用接口类型定义PrintMember的时候就会出现问题
问题如下:
图片说明

下面是主函数的定义
static void Main(string[] args)
{
User actress = new User() { FirstName = "Jennifer", LastName = "Lawrence", Age = 25};
Project project = new Project() { ProjectId = 1, ProjectName = "Bank System",
StartDate = DateTime.Now, DueDate = DateTime.Now.AddMonths(2) };

        //To Do : Add interface IMemberExpression and class MemberExpression
        IMemberExpression<User> userExpression = new MemberExpression<User>(actress);
        IMemberExpression<Project> projectExpression = new MemberExpression<Project>(project);

        System.Console.WriteLine("******User******");
        userExpression.PrintMember(e => e.FirstName)
            .PrintMember(e => e.LastName)
            .PrintMember(e => e.Age);

        System.Console.WriteLine("******Project******");
        projectExpression.PrintMember(e => e.ProjectId)
            .PrintMember(e => e.ProjectName)
            .PrintMember(e => e.StartDate)
            .PrintMember(e => e.DueDate);

        System.Console.ReadLine();
    }


            问题:如题
  • 写回答

2条回答 默认 最新

  • threenewbee 2016-09-27 03:48
    关注
     class MemberExpression<T>
    修改为
    static class MemberExpression<T>
    这样才能定义扩展方法
    
    但是这个类所有的成员必须都是静态的。
    
    或者
    public static IMemberExpression<T> PrintMember<TP, TResult>(this IMemberExpression<T> source, Func<T, TResult> action)
    去掉this
    public static IMemberExpression<T> PrintMember<TP, TResult>(IMemberExpression<T> source, Func<T, TResult> action)
    不用扩展方法
    
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器