C# 方法作为构造函数的参数?

C# 方法作为构造函数的参数?,c#,constructor,C#,Constructor,我正在写一个K-最近邻分类器类。我想让客户端能够指定要使用的距离函数 myKNN分类器对象的构造函数能否将方法作为参数?在Python中,我将按如下方式执行此操作: class KNNClassifier: def __init__(self, examples, membership, n_classes, distance_func): self.examples = examples self.membership = membe

我正在写一个K-最近邻分类器类。我想让客户端能够指定要使用的距离函数

my
KNN分类器
对象的构造函数能否将方法作为参数?在Python中,我将按如下方式执行此操作:

class KNNClassifier:

    def __init__(self, examples, membership, n_classes, distance_func):

        self.examples      = examples
        self.membership    = membership
        self.n_classes     = n_classes
        self.distance_func = distance_func

        self.m = len(self.membership)
        self.n = len(self.examples[0])`

这可以用C语言完成吗?我是C#的新手,请举一个简单的例子

是的,您可以使用
Func
Action
delegates
执行此操作:

行动:

Func:


委派:

是的,您可以使用
Func
操作
委派
来执行此操作:

行动:

Func:

代理:

您将使用。下面是一个简单的示例,使用:

您甚至可以将此与以下内容结合使用:

var foo = new MyClass<string>((a, b) => Math.Abs(a.Length - b.Length));
var foo=newmyclass((a,b)=>Math.Abs(a.Length-b.Length));
您将使用。下面是一个简单的示例,使用:

您甚至可以将此与以下内容结合使用:

var foo = new MyClass<string>((a, b) => Math.Abs(a.Length - b.Length));
var foo=newmyclass((a,b)=>Math.Abs(a.Length-b.Length));

请参见此处以获取参考:绝对可以使用委托作为参数。上面的链接提供了一个很好的答案。请参见此处以供参考:绝对可以使用委托作为参数。上面的链接提供了一个很好的答案。虽然正确,但请注意,您不必使用泛型来实现这一点。@LordTakkera是的,您是对的,泛型对于回答这个问题不是绝对必要的,但我觉得在本例中说明它们的用法会很有帮助。我只是指出了这一点,因为OP听起来好像不熟悉C#,我的同事很难理解泛型,更不用说泛型委托中的泛型了。虽然正确,但请注意,您不必使用泛型来完成此任务。@LordTakkera是的,您是对的,泛型不是回答问题的绝对必要条件,但我觉得在这个例子中说明它们的用法会很有帮助。我只是指出了这一点,因为OP听上去不熟悉C,我的同事也很难理解泛型,更不用说泛型委托中的泛型了。
Func
Action
也是委托。
Func
Action
也是委托。
var foo = new MyClass<string>((a, b) => Math.Abs(a.Length - b.Length));