【问题标题】:Pass variable behind method call as parameter在方法调用后面传递变量作为参数
【发布时间】:2020-08-02 19:40:54
【问题描述】:

在问之前我不得不说我是 C# 新手,只是想了解这是如何完成的。我没有通过谷歌搜索找到它,因为很难将其放入声明中。

当它们被称为参数时,如何获取放在它们后面的对象/变量的方法。 而不是将它们放入方法的大括号中。 就像著名的ToString()。 澄清更多,

我该如何写一个方法:

public void foo(Object before /* = the object behind */){
    console.log(before);
}

我可以这样使用:

object.foo();

而不是像这样使用它:

foo(object);

如果有多种方法可以实现这一点,我很高兴了解它们。谢谢。

【问题讨论】:

  • 你的意思是,把方法foo()放到一个类对象中?
  • @Andy 将写在foo() 后面的对象作为参数传递。喜欢obj.foo() 而不是foo(obj)
  • 听起来您要么在寻找“扩展方法”,要么只是在寻找“this”关键字。
  • @Sorena:你最喜欢的搜索引擎can easily find that。相反,您是否有一个示例说明您尝试过的某些事情并没有以您想要询问的特定方式起作用?

标签: c# methods parameters


【解决方案1】:

所以我认为你想要的是一门课。例如:

class Program {

    void Foo(){
        // this method belongs to class "Program"
    }

    class MyClass {
        public void Foo(){
            // this method belongs to class "MyClass"
        }
    }

    int Main(string[] args){
        // You can call this classes Foo() as so:
        Foo();

        // You can also create a new object of your nested class and call it's Foo():
        var myInstantiatedClassObject = new MyClass();
        myInstantiatedClassObject.Foo();
    }
}

如果您希望扩展现有对象,您可以这样做(这将扩展现有对象 string 给它一个名为 StrCat 的方法):

public static class StringExtensions {

    public static string StrCat(this string a, string b){
        return $"{a}{b}";
    }
}

那么你的字符串对象就会有那个方法:

string myString = "hello"
myString = myString.StrCat(" world");
// myString would then be "hello world"

【讨论】:

  • 扩展类中的方法应该和我要添加的对象的类型相同吧?
  • 是的——你用this关键字在第一个参数前面表示。
【解决方案2】:

一种方法是将方法设为class or struct method

另一种方式是extensions methods。但是要理解它们,您应该首先阅读第一个主题,因为顾名思义,这是它的扩展。

对于 Stack Overflow 的回答而言,仅课程的主题过于广泛,您应该找到自己喜欢的媒介(现实生活中的老师、书籍、视频)并了解它。它是 C# 和许多其他语言的基础。

【讨论】:

  • 是的,我明白了,我知道类是什么,并且认为这就是它们的完成方式。想知道一个单独的方法是否也能做到这一点。
  • 好吧,如果你已经知道 1 号门后面是什么,那么你必须看看 2 号门后面 :) 那是扩展方法。
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2021-04-23
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多