vbhargav80
asked on
Help with Generics
Dear Experts,
I have a generic class as follows:
public class Presenter<T>
{
// implementation goes here
}
I use it as follows in other classes
Presenter<IGenericView> presenter = new Presenter<IGenericView>();
I want to now write a function in a third class that can take the presenter object. Can you pleaes help me with the signature of that method should look like assuming it returns a bool and takes a Presenter object?
public bool DoSomething(Presenter myPresenter) <--- this does not work
I have a generic class as follows:
public class Presenter<T>
{
// implementation goes here
}
I use it as follows in other classes
Presenter<IGenericView> presenter = new Presenter<IGenericView>();
I want to now write a function in a third class that can take the presenter object. Can you pleaes help me with the signature of that method should look like assuming it returns a bool and takes a Presenter object?
public bool DoSomething(Presenter myPresenter) <--- this does not work
Notice in this line:
Presenter<IGenericView> presenter = new Presenter<IGenericView>();
that you specify <IGenericView> or you could have specified <whatever>. It's no different when passing parameters into a function, you can't leave that part out.
Presenter<IGenericView> presenter = new Presenter<IGenericView>();
that you specify <IGenericView> or you could have specified <whatever>. It's no different when passing parameters into a function, you can't leave that part out.
ASKER
Hi brandonvmoore,
Does that mean I have to write my function as
public bool DoSomething(Presenter<IGen ericView> myPresenter) ??
I do not want this. What I want is that in my presenter class I instantiate my third class which contains the method I am trying to write. This method then needs to be passed the presenter object.
SO something like this
public Presenter<T>
{
MyClass myObject = new MyClass();
myObject.DoSomething(this) ;
}
public MyClass
{
public bool DoSomething(Presenter myPresenter) <-- I want to fix this
}
Does that mean I have to write my function as
public bool DoSomething(Presenter<IGen
I do not want this. What I want is that in my presenter class I instantiate my third class which contains the method I am trying to write. This method then needs to be passed the presenter object.
SO something like this
public Presenter<T>
{
MyClass myObject = new MyClass();
myObject.DoSomething(this)
}
public MyClass
{
public bool DoSomething(Presenter myPresenter) <-- I want to fix this
}
When you create an instance of a generic class you have to specify what the type will be then. If you want the flexibility you're looking for then you could just always use a type of 'object' and not even use a generic class (since the type would always be object). And if you needed to you could cast it into other types where necessary. My suspicion though, is that you are learning something new and trying to apply it to a problem where it isn't really needed.
Explain what you're trying to accomplish and I or someone here can probably help you find a better approach.
Explain what you're trying to accomplish and I or someone here can probably help you find a better approach.
ASKER
HI brandonvmoore,
I trying to use the "Chain of Responsibility" pattern in some code that is already there.
Out team have written a sort of model view presenter pattern where the presenter takes a generic type (as explained above).
So if I have a class called MyView then to instantiate the presenter they say something like
Presenter<IMyView> presenter = new Presenter<IMyVIew>(this);
In my Presenter class now, I am writing the function to be called by the submit handler of a button (in the view). For different views, I am creating different handlers and hence want an interface
interface ISubmitHandler
{
public bool Submit(Presenter object);
}
This is where I'm getting stuck. Hope that helps.
I trying to use the "Chain of Responsibility" pattern in some code that is already there.
Out team have written a sort of model view presenter pattern where the presenter takes a generic type (as explained above).
So if I have a class called MyView then to instantiate the presenter they say something like
Presenter<IMyView> presenter = new Presenter<IMyVIew>(this);
In my Presenter class now, I am writing the function to be called by the submit handler of a button (in the view). For different views, I am creating different handlers and hence want an interface
interface ISubmitHandler
{
public bool Submit(Presenter object);
}
This is where I'm getting stuck. Hope that helps.
OK, the interface is in no way related to the use of generics. Maybe you know that, but based off your comment I wasn't sure.
Interfaces and handlers are two different things. You would only create an interface if you were making a class that is going to be inherited by other classes and you wanted to give them the ability to write their own code for some function(s). You probably do not need to use any interfaces.
A handler is just a function, not an interface. What makes it a handler is that you attach it to an event. Read up on handlers in the microsoft documentation that comes with Visual Studio as it should provide some examples.
As far as generics, I still don't know what YOUR class is trying to do. But unless YOUR class accepts and works with various data types, then you don't need to use generics. Just because your class is being used in a generic class doesn't mean that you have to do anything special with generics.
Hope that helps some. You might consider watching some of the free videos on microsoft.com on OOP in c# or do some reading on the web as there is a multitude of information on it out there.
Interfaces and handlers are two different things. You would only create an interface if you were making a class that is going to be inherited by other classes and you wanted to give them the ability to write their own code for some function(s). You probably do not need to use any interfaces.
A handler is just a function, not an interface. What makes it a handler is that you attach it to an event. Read up on handlers in the microsoft documentation that comes with Visual Studio as it should provide some examples.
As far as generics, I still don't know what YOUR class is trying to do. But unless YOUR class accepts and works with various data types, then you don't need to use generics. Just because your class is being used in a generic class doesn't mean that you have to do anything special with generics.
Hope that helps some. You might consider watching some of the free videos on microsoft.com on OOP in c# or do some reading on the web as there is a multitude of information on it out there.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx