Execute function from unknow type T
up vote
0
down vote
favorite
I have a class like this:
public class TestClass
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public static static int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and I have many differend classes like this with differend properties but always with a "TestFunction" function with differend content (like +/*/:/-).
Now I want to to build another function that calls this function without knowing the type of the function but I know that "Testfunction" is always there.
Here is my try:
public static int AnotherFunction<T>(T inClass, int c, int d)
{
//Other stuff...
return inClass.TestFunction(c, d);
}
The functions are for showing purposes simplyfied (dont just say "call the function directly because it doesnt do much").
The Problem is that Visual Studio says "TestFunction" is unknown.
How can I do this without knowing what class I get?
c# function
add a comment |
up vote
0
down vote
favorite
I have a class like this:
public class TestClass
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public static static int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and I have many differend classes like this with differend properties but always with a "TestFunction" function with differend content (like +/*/:/-).
Now I want to to build another function that calls this function without knowing the type of the function but I know that "Testfunction" is always there.
Here is my try:
public static int AnotherFunction<T>(T inClass, int c, int d)
{
//Other stuff...
return inClass.TestFunction(c, d);
}
The functions are for showing purposes simplyfied (dont just say "call the function directly because it doesnt do much").
The Problem is that Visual Studio says "TestFunction" is unknown.
How can I do this without knowing what class I get?
c# function
1
You can't, because it's static. Why is it static? Or well you could, using reflection, but you don't want to. If it weren't, you could use an interface.
– CodeCaster
Nov 22 at 12:51
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a class like this:
public class TestClass
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public static static int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and I have many differend classes like this with differend properties but always with a "TestFunction" function with differend content (like +/*/:/-).
Now I want to to build another function that calls this function without knowing the type of the function but I know that "Testfunction" is always there.
Here is my try:
public static int AnotherFunction<T>(T inClass, int c, int d)
{
//Other stuff...
return inClass.TestFunction(c, d);
}
The functions are for showing purposes simplyfied (dont just say "call the function directly because it doesnt do much").
The Problem is that Visual Studio says "TestFunction" is unknown.
How can I do this without knowing what class I get?
c# function
I have a class like this:
public class TestClass
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public static static int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and I have many differend classes like this with differend properties but always with a "TestFunction" function with differend content (like +/*/:/-).
Now I want to to build another function that calls this function without knowing the type of the function but I know that "Testfunction" is always there.
Here is my try:
public static int AnotherFunction<T>(T inClass, int c, int d)
{
//Other stuff...
return inClass.TestFunction(c, d);
}
The functions are for showing purposes simplyfied (dont just say "call the function directly because it doesnt do much").
The Problem is that Visual Studio says "TestFunction" is unknown.
How can I do this without knowing what class I get?
c# function
c# function
asked Nov 22 at 12:49
SomePerson
519
519
1
You can't, because it's static. Why is it static? Or well you could, using reflection, but you don't want to. If it weren't, you could use an interface.
– CodeCaster
Nov 22 at 12:51
add a comment |
1
You can't, because it's static. Why is it static? Or well you could, using reflection, but you don't want to. If it weren't, you could use an interface.
– CodeCaster
Nov 22 at 12:51
1
1
You can't, because it's static. Why is it static? Or well you could, using reflection, but you don't want to. If it weren't, you could use an interface.
– CodeCaster
Nov 22 at 12:51
You can't, because it's static. Why is it static? Or well you could, using reflection, but you don't want to. If it weren't, you could use an interface.
– CodeCaster
Nov 22 at 12:51
add a comment |
1 Answer
1
active
oldest
votes
up vote
5
down vote
accepted
You can create an interface and the types can inherit from it and provide their own implementation for those.
Then you can constraint your method for the generic parameter on that interface type so that all types inheriting from it can call respective implementation.
See the following :
public interface IInterface
{
int TestFunction(int c, int d);
}
public class TestClass : IInterface
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and now you can write a method like:
public static int AnotherFunction<T>(T inClass, int c, int d) where T : IInterface
{
//Other stuff...
return inClass.TestFunction(c, d);
}
Hope it gives you idea.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
accepted
You can create an interface and the types can inherit from it and provide their own implementation for those.
Then you can constraint your method for the generic parameter on that interface type so that all types inheriting from it can call respective implementation.
See the following :
public interface IInterface
{
int TestFunction(int c, int d);
}
public class TestClass : IInterface
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and now you can write a method like:
public static int AnotherFunction<T>(T inClass, int c, int d) where T : IInterface
{
//Other stuff...
return inClass.TestFunction(c, d);
}
Hope it gives you idea.
add a comment |
up vote
5
down vote
accepted
You can create an interface and the types can inherit from it and provide their own implementation for those.
Then you can constraint your method for the generic parameter on that interface type so that all types inheriting from it can call respective implementation.
See the following :
public interface IInterface
{
int TestFunction(int c, int d);
}
public class TestClass : IInterface
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and now you can write a method like:
public static int AnotherFunction<T>(T inClass, int c, int d) where T : IInterface
{
//Other stuff...
return inClass.TestFunction(c, d);
}
Hope it gives you idea.
add a comment |
up vote
5
down vote
accepted
up vote
5
down vote
accepted
You can create an interface and the types can inherit from it and provide their own implementation for those.
Then you can constraint your method for the generic parameter on that interface type so that all types inheriting from it can call respective implementation.
See the following :
public interface IInterface
{
int TestFunction(int c, int d);
}
public class TestClass : IInterface
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and now you can write a method like:
public static int AnotherFunction<T>(T inClass, int c, int d) where T : IInterface
{
//Other stuff...
return inClass.TestFunction(c, d);
}
Hope it gives you idea.
You can create an interface and the types can inherit from it and provide their own implementation for those.
Then you can constraint your method for the generic parameter on that interface type so that all types inheriting from it can call respective implementation.
See the following :
public interface IInterface
{
int TestFunction(int c, int d);
}
public class TestClass : IInterface
{
public int A { get; set; }
public int B { get; set; }
//Other stuff...
public int TestFunction(int c, int d)
{
//Other stuff...
return c + d;
}
}
and now you can write a method like:
public static int AnotherFunction<T>(T inClass, int c, int d) where T : IInterface
{
//Other stuff...
return inClass.TestFunction(c, d);
}
Hope it gives you idea.
answered Nov 22 at 12:51
Ehsan Sajjad
48.9k1067118
48.9k1067118
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53431412%2fexecute-function-from-unknow-type-t%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
You can't, because it's static. Why is it static? Or well you could, using reflection, but you don't want to. If it weren't, you could use an interface.
– CodeCaster
Nov 22 at 12:51