|
George isnt it clear that all this person did was google some of the words you've used in your OP? Although ill-informed, he is demonstrating that if you put a little research in then you can often find this sort of information online!
But then you've been asked this before, and it falls on deaf ears.
|
|
|
|
|
Yes,J4amieC.
There is another confusion point, from
http://csharpindepth.com/ViewNote.aspx?NoteID=92
"the feature allows you to specify an extension method as a method group using extension syntax"
my confusion is what is an extension method? I also did some search but almost find nothing to give a precise definition. How do you think of it?
regards,
George
|
|
|
|
|
IIRC, it is to do with delegates and method compatibility.
|
|
|
|
|
Thanks leppie!
In my understanding, method group is a set of methods which have the same signature, and not necessary to belong to a specific class. But I am not sure whether I am correct. Any comments or ideas?
regards,
George
|
|
|
|
|
George_George wrote: But I am not sure whether I am correct.
I think that is correct. When I read the spec a few years back 'method group' seemed like a very abstract term.
Example: say you have a delegate defined as follows:
delegate int Foo(string bar);
Any method that can be used with that delegate belongs in the same method group. Eg. Convert.ToInt32 and int.Parse or even:
int Bar(string foo)
{
return 0;
}
I am not 100% sure about my interpretation
|
|
|
|
|
Thanks leppie!
I like your description.
There is another confusion point, from
http://csharpindepth.com/ViewNote.aspx?NoteID=92[^]
"the feature allows you to specify an extension method as a method group using extension syntax"
my confusion is what is an extension method? I also did some search but almost find nothing to give a precise definition. How do you think of it?
regards,
George
|
|
|
|
|
I know C# 3.0 has extension methods, but that is definitely not part of the CLR EMCA spec.
What he/she is refering to is what you were asking about the other day with Delegate.Create with the open and closed stuff. (MSDN really has good docs on this!).
|
|
|
|
|
Thanks leppie,
Acutally my question is not how to use Delegate.CreateDelegate, but what means extension method.
Any ideas?
regards,
George
|
|
|
|
|
|
|
Extension methods allow you to extend an existing class or struct by adding methods.
Consider this pointless example:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int i = 0;
i = i.ToMax();
Console.Write(i);
Console.Read();
}
}
public static class Extensions
{
public static int ToMax(this int i)
{
i = int.MaxValue;
return i;
}
}
} Now any time you use an integer instance it automatically has the ToMax() method available.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Expect everything to be hard and then enjoy the things that come easy. (code-frog)
|
|
|
|
|
Thanks Dave,
Really good stuff. One more question about method group,
http://csharpindepth.com/ViewNote.aspx?NoteID=92
what means "an extension method as a method group using extension syntax" in the above link?
regards,
George
|
|
|
|
|
No, that's not how method group is used in the spec (at least how I remember it).
An expression like "Console.WriteLine" returns a method group. It is a group of methods with different signatures, and when invoking the method group or constructing a delegate from it, the compiler chooses the method (the overload) with the matching signature (actually "best matching" signature, as defined in the spec).
|
|
|
|
|
AH ok, so it's like overload resolution?
|
|
|
|
|
Yes, overload resolution looks up a method from a method group.
The spec wrote:
An expression is classified as one of the following:
...
• A method group, which is a set of overloaded methods resulting from a member lookup (§7.3). A method group may have an associated instance expression and an associated type argument list. When an instance method is invoked, the result of evaluating the instance expression becomes the instance represented by this (§7.5.7). A method group is only permitted in an invocation-expression (§7.5.5) or a delegate-creation-expression (§7.5.10.3). In any other context, an expression classified as a method group causes a compile-time error.
...
|
|
|
|
|
Agree, Daniel!
One more question about method group,
http://csharpindepth.com/ViewNote.aspx?NoteID=92
what means "an extension method as a method group using extension syntax" in the above link?
regards,
George
|
|
|
|
|
I think the author is making a reference to method group as 'all the available methods that can be used like an instance method'.
An extension method is a C# compiler construct and does not form part of the CLI spec.
|
|
|
|
|
Thanks leppie,
1.
You mean the point of author is all kinds of instances methods from all classes/namespace belongs to
a single method group?
2.
What means "extension syntax" in his words?
regards,
George
|
|
|
|
|
|
Thanks Daniel,
Two more comments,
1.
"No, that's not how method group is used in the spec (at least how I remember it)." -- I am losing the context.
You mean my understanding that "method group is a set of methods with the same signature" is wrong?
2.
"An expression like "Console.WriteLine" returns a method group." -- Console.WriteLine returns void. Why do you say it returns method group?
regards,
George
|
|
|
|
|
1.
George_George wrote: You mean my understanding that "method group is a set of methods with the same signature" is wrong?
Yes. A method group is a set of methods with different signatures. There are 19 different "Console.WriteLine" methods (19 overloads with different parameters).
2.
"Console.WriteLine" is an expression that returns a method group.
You can do one of two things with a method group:
a) Invoke a method from it: "Console.WriteLine()" - this chooses one of the overloads compatible with the parameters you are passing, and invokes it.
b) Assign it to a variable of a delegate type "Action a = Console.WriteLine" - this chooses one of the overloads compatible with the delegate signature, and creates a delegate from it.
So the return type of "Console.WriteLine" is a method-group. The return type of "Console.WriteLine()" is void.
You cannot declare "method-group" variables, only variables of delegate types that store only a single method from the group.
|
|
|
|
|
Thanks Daniel,
1.
Now I have understood why my previous understanding -- method group is a set of methods with the same signature. But what is the exact definition of a method group? I found it is too flexible to understand, e.g. how could I know whether an expression like Console.WriteLine returns a method group, any easy to understand and remember rules?.
2.
Console.WriteLine could have 19 overloads, wow! But for delegate we still need to specify the parameter type/number and return value type, how could you use a single delegate variable/type to point to different methods with different parameter type/number and return value type -- like Console.WriteLine?
regards,
George
|
|
|
|
|
Hello all.
Does anybody know how to query the available mail servers active on a mchine prior to calling the send method on the MailMessage class. i.e. There could be a SMTP or exchange server on the network.
Cheers.
|
|
|
|
|
Matt Fishbeck wrote: . There could be a SMTP or exchange server on the network.
SMTP is a protocol. Exchange is a product. Exchange can handle SMTP (if enabled).
|
|
|
|
|
Is there a call to query the STMP server to be used as a parameter to be passed into the constructor of SmtpClient?
|
|
|
|