|
Thats what i have been trying to do... It doesn't work.
DO you have any example code you can show me?
|
|
|
|
|
I have a class Categroy that derives from it's base RESTResource .
public class Category : RESTResource
{
}
public class RESTResource
{
public < derived type > Get()
{
}
}
The above example should evaluate to ... public Category Get() ... at runtime.
Depending on the Type of the derviced class from RESTResource , how Can I set the return type of RESTResource.Get() ?
/\ |_ E X E GG
|
|
|
|
|
I'm not sure if you can write generic properties. If not, all you can do is return the base type, and users would have to cast it. I don't think you can override a property and change it's return type.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
I guess ruby got my hopes up...
/\ |_ E X E GG
|
|
|
|
|
It really shouldn't matter that you can't change the return type. Assuming that you could, you would still need to declare a variable to hold it using the dervied type. This implies that you know the type like:
RESTResource r = ;
Category c = r.Get();
Since you need to know the return type anyway, you can simply set the return type of Get to RESTResource then cast it like so:
RESTResource r = ;
Category c = r.Get() as Category;
if (null != c)
Now, you may be referring to virtual functions, which work like this:
public class RESTResource {
public virtual RESTResource Get() {
return new RESTResource();
}
}
public class Category : RESTResource {
public override RESTResource Get() {
return new Category();
}
}
RESTResource r = new RESTResource();
RESTResource r2 = r.Get();
Category c = new Category();
Category c2 = c.Get() as Category;
Take care,
Tom
-----------------------------------------------
Check out my blog at http://tjoe.wordpress.com
|
|
|
|
|
Thanks. I think I'm going to head in a different direction with this...
Now, is this the right use of generics?
Category has a static string endpoint_url. I would like to get that from T1 in the Create method.
Create<Category>();
.
.
.
public Response Create<T1>()
{
string url=
}
public class Category
{
public static string endpoint_url = "/categories";
public int id;
public string name;
public int content_provider_id;
}
-- modified at 1:50 Tuesday 2nd October, 2007
/\ |_ E X E GG
|
|
|
|
|
Your code isn't complete, so I can't really tell what you are doing (or want to do). Can you provide a little more info or more complete example?
Take care,
Tom
-----------------------------------------------
Check out my blog at http://tjoe.wordpress.com
|
|
|
|
|
I have this class structure:
public class Test
{
public Response Create<T1>()
{
string url=
}
}
public class Category
{
public static string endpoint_url = "/categories";
public int id;
public string name;
public int content_provider_id;
}
My Category class has a static string endpoint_url. I want to get that string from inside of create using the Type T1 and save it to url.
My expected results are to have url set to "/categories"
/\ |_ E X E GG
|
|
|
|
|
You can either create an abstract base class or an interface (from which Category and others would derive). If Category and any possible other classes have common functionality, then you should go with an abstract base class, because you can put that common functionality in there. If you go with an interface, then your classes (e.g. Category) really won't share code.
You won't be able to get the static endpoint_url without creating an instance of Category. Both methods above require an instance of Category. Assuming you are willing to create an instance of Category, the code would be like this:
public Response Create<T>() where T : MyBaseClass {
T myClass = new T();
String url = myClass.GetURL();
}
public abstract class MyBaseClass {
public abstract String GetURL();
}
public class Category : MyBaseClass {
public static string endpoint_url = "/categories";
public override String GetURL() {
return Category.endpoint_url;
}
}
Response r = t.Create<Category>();
Take care,
Tom
-----------------------------------------------
Check out my blog at http://tjoe.wordpress.com
|
|
|
|
|
TJoe wrote: If Category and any possible other classes have common functionality, then you should go with an abstract base class
Yeah, I have a few other classes... I was just using Category as an example.
I'll try out what you've worked out first thing tomorrow.
Thanks,
Alex
/\ |_ E X E GG
|
|
|
|
|
I get a compile error on this line:
T myClass = new T();
Error 1 Cannot create an instance of the variable type 'T' because it does not have the new() constraint
/\ |_ E X E GG
|
|
|
|
|
This means that the constraint for the generic is missing the new() keyword. For example:
public T Create() where T : ISomething, new()
{
T item = new T();
return item;
} The new constraint can only be used with a zero-arg constructor.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
"Because not all objects are guaranteed to have public default constructors, the compiler does not allow you to call the default constructor on the type parameter. To override this compiler restriction, you add the text new() after all other constraints are specified. This text is a constructor constraint, and it forces the type parameter decorated with the constructor constraint to have a default constructor." (http://www.codeproject.com/books/EssentialCS20.asp[^])
Fix is easy, public Response Create<T>() where T : MyBaseClass, New()
[ My Blog] "Visual studio desperately needs some performance improvements. It is sometimes almost as slow as eclipse." - Rüdiger Klaehn "Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe
|
|
|
|
|
Sorry, forgot about the new() keyword. Pete's response describes how to use it.
Take care,
Tom
-----------------------------------------------
Check out my blog at http://tjoe.wordpress.com
|
|
|
|
|
Did you perhaps for get to escape a < in your code?
Take care,
Tom
-----------------------------------------------
Check out my blog at http://tjoe.wordpress.com
|
|
|
|
|
just fixed it.
/\ |_ E X E GG
|
|
|
|
|
This will do it.
public class Category : RESTResource<Category>
{
}
public class RESTResource<T> where T : RESTResource, new()
{
public <T> Get()
{
T item = new T();
return item;
}
}
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
|
No problem. I hope it helped.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
I'm developing a windows application in C# with crystal reports. In one of my reports I deisplay passenger list comes by cruises. I group it by cruise no. I want to display group footer with total no of passengers by their nationality and grand total, something like this,
Malaysia 10
Singapore 15
Thailand 10
Total 35
and I need to do the same thing at the report footer as well with totals of groups. Can anybody tell me how to do it.
|
|
|
|
|
Dear All,
I am making a NMS (Network Monitoring System) and have accomplished to query windows based computers via the WMI (which by the way is very helpful).
Now my target is to embed the SNMP functionality inorder to achieve status of Managed Network devices (such as switches and routers...) to be displayed into my software.
I have seen codes at CP but there is a wrapper class that available but I am looking for is making it right from the scratch in C#
Please Advice
Thank you!
M. Nauman Yousuf
"Mess with the Best, Die like the rest"
|
|
|
|
|
ive got a very simple program set up in vs 2003 written in c#...
it includes a ref to system.diagnostics and uses process.start(@"c:/meh.bat") to try and run a batch script... the code runs without error, and i see the console window flash before me, but it seems as though nothing happened... so to test it out i setup the batch script to run notepad... i double click on the script through windows, and there's notepad... i run the program which SHOULD run the batch script, and nothing happens.... anyone have a clue as to what might be going on?
|
|
|
|
|
Didn't you want a backslash rather than a slash?
|
|
|
|
|
yes, im sure its right in the code though, i was just trying to get the point across and i dont have the code in front of me
when i made it just to be safe i went to start>run>browse, clicked the batch script then copied the exact text from the run window to be sure it was err free
|
|
|
|
|
The window closes as soon as the executable exits.
You can add a System.Console.ReadLine() to the end of your app so it stays open until you press return.
|
|
|
|