具有generics类型的C#属性

我上课了:

public class class1 { public string Property1 {get;set;} public int Property2 {get;set;} } 

哪个将被实例化:

 var c = new class1(); c.Property1 = "blah"; c.Property2 = 666; 

所以忍受我(我是generics的新手),我需要另一个具有generics类型属性的类,以便可以使用Property1或Property2来设置Property3:

 public class Class2 { public GenericType Property3 {get;set;} } 

我希望能够:

 var c2 = new class2(); c2.Property3 = c1.Property2 // Any property of any type. 

@bytenik我认为发起人要求将class3定义为包含generics属性。 这样,当他/她有一个来自class1或class2的属性时,在这种情况下是一个字符串/ int,class3的属性可以处理这两种情况。

 public class Class3 { public T Property3 {get;set;} } 

我认为意图是海报想要这样做:

 Class3.Property3 = Class2.Property2 

我认为海报需要将它投射到T型才能实现。

查看为示例发布的链接:创建一个通用属性

这是你可以做的:

 namespace GenericSO { public class Class1 { public int property1 { get;set;} } public class Class2 { public T property2 { get; set; } } class Program { static void Main(string[] args) { Class1 c1 = new Class1(); c1.property1 = 20; Class2 c2 = new Class2(); c2.property2 = c1.property1; } } } 

请注意您的模板property2如何获取property1的值。 你必须告诉它什么样的generics。

 public class class1 { public T Property3 {get;set;} } 

关于问题的编辑版本:

如果你需要一个可以用任何类型设置的属性,这里最合理的解决方案是简单地使用Object类型的属性。 对于C#编译器,无法找到您之前推入属性设置器的确切类型的实例。

我想你可能误解了generics。 可以使用的另一个词是“模板”,但这是可以避免的,因为它用于C ++中更高级的东西。

以下将创建当前未定义类型T的generics类。

 public class Class2 { public T Property3 { get; set; } } 

要使用它,您需要指定缺少的类型:

 var x = new Class2(); 

这将创建一个具有属性Property3的对象,该属性类型为int。

… 要么 …

 var y = new Class2(); 

这将创建一个具有属性Property3的对象,该属性的类型为string。

从你的问题我相信你真的想要一个类型,你可以在运行时为它分配任何类型,但这不是generics提供的。