I would look this up on Google/MSDN, but I have no idea what it’s called so I’m asking here.
In Java, I seem to remember you can do this really cool thing like:
Class MyClass
{
int number;
MyClass() { }
void setNumber(int number)
{
this.number = number;
}
}
and then do something like:
MyClass myClass = new MyClass()
{
override void setNumber(int Number)
{
this.number = 2 * number;
}
};
…or something. Forgive any mistakes I made above – I haven’t actually touched Java in about 6 years.
The point is, I remember you could pseudo-extend a class inline.
Right now, I need to extend a C# WinForms control, but I only need to use it once, and the modifications are very minor. All I need to do is to override the CreateParams property and OnPaint() handler.
My solution is already getting huge with classes all over the place, it seems like a shame to include yet another class which is basically identical to a standard .Net control, just with very slightly different behaviour.
Is it possible to do this inline-extension in C# like you could in Java? If so, how? (and what is it called so I can look it up on MSDN?)
This (explicit nominative anonymous types) is not possible in C#3/4.
The types must be created explicitly and then constructed. Tasks are sometimes “inverted” in C# with the use of Events and Delegates (class invokes Event which supplies implementation such as “NeedDataSource”) — arguably because of this, although it just makes sense in many cases.
If is possible to create explicit non-nominative types:
var x = new { P = 1, };but only in a local scope. Implicit methods include delegates/lambdas/anonymous functions and do not apply here.Happy coding.