gpt4 book ai didi

c# - 创建方法可以访问类似的命名字段,但没有继承的不同类型的对象

转载 作者:行者123 更新时间:2023-11-30 20:02:26 26 4
gpt4 key购买 nike

在 C# 中创建可访问相似命名字段但不同类型对象且无继承的方法。

例如。我有 2 个类(class):

      public class MyClass1
{
public int Id { get; set; }
}
public class MyClass2
{
public int Id { get; set; }
}

我需要创建方法并将每个类的实例传递给它:

    DoStuff(new MyClass1());
DoStuff(new MyClass2());

方法是这样的:

    private void DoStuff<T>(T obj)
{
int i = obj.Id(); // here is the problem
}

是的,问题是 obj 无法解析 Id。解决方案很简单 - 使用 Id 属性创建 RootClass,并使用 public class MyClass1: RootClass... ,但我不能这样做。

问题是:我可以在不创建 RootClass 的情况下使用像 int i = obj.Id(); 这样的行吗?

编辑: 我需要这样的答案:
不,因为......或
是的,这样做......

最佳答案

这通常是接口(interface)存在的原因:描述一个公共(public)契约,但类之间没有关系。

我建议你创建这个接口(interface)

public interface IHasId { 
int Id { get; set; }
}


public class MyClass1 : IHasId
{
public int Id { get; set; }
}
public class MyClass2 : IhasId
{
public int Id { get; set; }
}


...


private void DoStuff<T>(T obj)
where T : IHasId // constraint my be moved to the class declaration
{
int i = obj.Id();
}

创建此接口(interface)将使您避免引入根类,如果类没有根行为,则可能不需要这样做。

关于c# - 创建方法可以访问类似的命名字段,但没有继承的不同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16829646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com