繁体   English   中英

在 c# 中将 object 作为 function 参数传递,就像在 javascript 中一样

[英]Pass object as function parameter in c# like in javascript

是否有可能在 c# 中通过 object,就像我在 Javascript 中以通用方式一样? 如何在 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)

我想制作与一个 function 相同的 showName 但 c# 需要声明 class 名称,如:

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

我可以像在 JS 中一样在 c# 中实现这一点的示例代码如何?

要在 C# 中执行此操作,您要么需要使用公共基类或接口(也许IHasName带有string Name {get;}属性,并将参数声明为IHasName ,并声明HumanCat都实现IHasName ),或者您可以抛开所有理由并将参数声明为dynamic ,因为 JavaScript 感觉。 请做第一个,而不是第二个!

您可以使用接口来实现它。 接口为基于它实现的class 提供抽象,您可以在方法的arguments 中使用接口。 看这个例子:

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM