So lately I have been developing a C# application with Xamarin. Then I faced a design problem where I should be able to call a function inside a class with generic type, but I don’t know what is the generic type. Furthermore, I don’t care what is the type of the generic.
Imagine a situation like this: I have a class like this:
1 2 3 4 5 |
|
Let’s go straight to the point: What if I want to call Destroy, but I don’t care what is T? So I have
1
|
|
object x
is an instance of Wrapper
. But I can’t cast it into wrapper without knowing the exact value of the generic type. I can’t do something like this:
1 2 |
|
Also, generic is tightly coupled in C#. Meanwhile, in Java, generic is optional. If you don’t specify the generic, Java just simply treat the generic type as Object
. In java you can write the code like below, but not in C#:
1
|
|
So how do I call Destroy
without knowing the T
? Surprisingly, the solution is pretty simple. Just extract the Destroy
method to an interface:
1 2 3 4 5 6 7 8 9 10 |
|
So that I can simply call this:
1
|
|
Perhaps the next question is, why we get x
as an object
type at the first place? Why don’t we just simply make it stronger type to Wrapper
with known T
? I don’t know. Perhaps because I am working too much with reflection since I am creating Xamarin-based Android and iOS application with MvvmCross.