在 c# 中将对象作为函数参数传递,如 javascript

Pass object as function parameter in c# like in javascript

是否有可能像我在 Javascript 中那样以通用方式在 c# 中传递对象?我怎样才能在 C# 中实现这一点?由于所有变量都需要声明,但它们具有不同的 class 名称。

class human {
  constructor() {
    this.name = "John";
  }
}

class cat {
  constructor() {
    this.name = "Garfield";
  }
}


 function showName(character) {
    console.log("My name is: " + character.name)
  };

var character1 = new cat();
var character2 = new human();

showName(character1)
showName(character2)

我想制作与一个函数相同的 showName 但 c# 要求声明 class 名称,例如:

public void ShowName(Human human) {}
public void ShowName(Cat cat) {}

我可以像在 JS 中一样在 C# 中实现此功能的示例代码如何?

要在 C# 中执行此操作,您 要么 需要使用公共基 class 或接口(可能 IHasName 带有 string Name {get;} 属性,并声明参数为IHasName,并声明HumanCat都实现了IHasName),或者你可以把所有的理由都扔给wind 并将参数声明为 dynamic,以获得 JavaScript 的感觉。请做第一个,不要做第二个!

您可以使用界面来实现它。 Interface 为那些基于它实现的 class 提供了抽象,你可以在方法的参数中使用 interface 。看这个例子:

public interface IBeings
{
    public string Name { get; set; }
}

public class Human : IBeings
{
    public string Name { get; set; }
}

public class Cat : IBeings
{
    public string Name { get; set; }
}

class Program
{
    static void ShowName(IBeings being)
    {
        Console.WriteLine($"My name is: {being.Name}");
    }

    static void Main(string[] args)
    {
        Human human1 = new Human() { Name = "John" };
        Cat cat1 = new Cat() { Name = "Kitty" };

        ShowName(human1);
        ShowName(cat1);
    }
}