This question already has answers here:
Closed 7 years ago.
I have a class:
public class class1
{
public string Property1 {get;set;}
public int Property2 {get;set;}
}
Which will be instantiated:
var c = new class1();
c.Property1 = "blah";
c.Property2 = 666;
So bear with me (I am new to generics), I need another class with a property of a generic type so that Property1 or Property2 can be used to set Property3:
public class Class2
{
public GenericType Property3 {get;set;}
}
I want to be able to:
var c2 = new class2();
c2.Property3 = c1.Property2 // Any property of any type.
@bytenik I think the originator is asking that class3 be defined to contain a generic property. That way when he / she has a property from class1 or class2 which in this case is a string / int that class3's property could handle either case.
public class Class3<T>
{
public T Property3 {get;set;}
}
I think the intent is the poster wants to do this:
Class3.Property3 = Class2.Property2
I think the poster will need to cast it to type T for this to work though.
Look at the link that was posted for an example: Making a generic property
Here is what you can do:
namespace GenericSO
{
public class Class1
{
public int property1 { get;set;}
}
public class Class2<T>
{
public T property2 { get; set; }
}
class Program
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
c1.property1 = 20;
Class2<int> c2 = new Class2<int>();
c2.property2 = c1.property1;
}
}
}
Notice how your template property2 gets the value of property1.
You have to tell it what kind of generic.
public class class1<T>
{
public T Property3 {get;set;}
}
Regarding to edited version of the question:
If you need a property, which can be set with any type, the most reasonable solution here is to simply use property of type Object. For C# compiler there is no way to find out instance of which exactly type you've previously pushed into property setter.
I think you may have misunderstood generics. Another word that could be used is "template" but that is avoided because it is used for more advanced things in C++.
The following will create a generic class of a currently undefined type T.
public class Class2<T>
{
public T Property3 { get; set; }
}
To use this you need to specify the missing type:
var x = new Class2<int>();
This will create an object that has a property Property3 that is of type int.
... or ...
var y = new Class2<string>();
This will create an object that has a property Property3 that is of type string.
From your question I believe you actually want a type where you can assign any type to it at runtime, but this is not what generics provide.