[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

c# generic syntax don't understand

Posted on 2015-02-03
6
Medium Priority
?
176 Views
Last Modified: 2015-02-03
Can anyone explain this to me...I'm too dumb! This is from the telerik mvc grid extensions, you make columns with
Grid.Columns(columns=>{
columns.Bound("xx");etc
}
I put a break in the Columns func, and its sig is:
Columns(Action<GridColumnFactory> configurator)
Now, I understand, Action<T> is a delegate void method, but what I don't understand is how columns=>{
columns.Bound("xx"); }is implicitly cast to GridColumnFactory?
(GridColumnFactory- a class which has params in its constructor )
0
Comment
Question by:Silas2
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 40586143
It isn't being implicitly cast - it is explicitly declared by the Columns() method.

If you look at the documentation for the Columns() method, you'll see that it takes a parameter of type Action<GridColumnFactory<T>> (reference: http://www.telerik.com/help/aspnet-mvc/m_telerik_web_mvc_ui_fluent_gridbuilder_1_columns.html) where T is the model that the grid is being bound to.
0
 

Author Comment

by:Silas2
ID: 40586297
Ok, its in the function sig in the docs, but how does columns=>{ columns.bound("xx"; columns.bound("yy");} become acceptable as GridColumnFactory? it doesn't look anything like the factory.
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 40586454
columns (the left-hand operator version) is created at runtime implicitly based on the context.  The runtime can figure out the type from the context.

So, in you case, columns will actually be an object of type GridColumnFactory<TModel>. Bound() is a method on the factory class.

Hope that makes some sense.
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 

Author Comment

by:Silas2
ID: 40586630
Most kind, yes Its certainly helping.

So when the param comes into the call it (the runtime) hasn't instanced the factory even though it's (or something is) in the call.

In the call , (which is on the GridBuilder obj), this is the first line:
configurator(new GridColumnFactory(Component, Context));

(configurator is the method param)

Aah, the penny (half) dropped as I was typing, so the configurator is an Action<GridColumnFactory<T>>, does that mean the default call is to make a new one? Factory I mean, so does that mean if x = Action<Type>, then x(new Type())?
0
 
LVL 52

Accepted Solution

by:
Carl Tawn earned 2000 total points
ID: 40586671
>> so the configurator is an Action<GridColumnFactory<T>>, does that mean the default call is to make a new one?

Yes, that's the jist of it.  Because it is a Lambda expression, the underlying mechanics will instantiate a new object of type Action<GridColumnFactory<T>>, and that becomes the context for the expression.  So, anything to the right of => is using an instance of the GridColumnFactory<T> object to make calls on.
0
 

Author Comment

by:Silas2
ID: 40586769
So, from the docs:
Action<string> messageTarget;
messageTarget = s => Console.WriteLine(s);

So with the grid:
Action<GridColumnFactory<T>> x;
x=>{ x.Bound(1); x.Bound(2); }

Ah, I think I get it, for each x.Bound call, its using the factory's bound call. So the call into 'Columns', is receiving the right param, not because its been explicitly sent, but because the receiving procedure but because of its signature.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…

656 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question