像在javascript中一样,在c中传递对象作为函数参数



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

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#需要声明类名称,如:

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

我可以在c#中像在JS中一样实现这一点的示例代码会是什么样子?

要在C#中做到这一点,要么需要使用一个公共基类或接口(可能是具有string Name {get;}属性的IHasName,并将参数声明为IHasName,并声明HumanCat都实现了IHasName(,要么您可以把所有的理由都抛在脑后,将参数宣布为dynamic,以获得JavaScript的感觉。请做第一个,不要做第二个!

您可以使用接口来实现它。接口为基于它实现的类提供了弃权,您可以在方法的参数中使用接口。参见此示例:

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

最新更新