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

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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?