以下两行都相同.但是有什么隐藏的区别吗?应该首选哪一个?
Thread t1 = new Thread(aMethod);
Thread t2 = new Thread(new ThreadStart(aMethod));
Run Code Online (Sandbox Code Playgroud)
谢谢.
请参阅下面的Go()方法中的四行:
delegate void Action<T>(T arg);
delegate void Action();
void DoSomething<T>(Action<T> action)
{
//...
}
void DoSomething(Action action)
{
//...
}
void MyAction<T>(T arg)
{
//...
}
void MyAction()
{
//...
}
void Go<T>()
{
DoSomething<T>(MyAction<T>); // throws compiler error - why?
DoSomething(new Action<T>(MyAction<T>)); // no problems here
DoSomething(MyAction); // what's the difference between this...
DoSomething(new Action(MyAction)); // ... and this?
}
Run Code Online (Sandbox Code Playgroud)
请注意,第一次调用生成的编译器错误是: 方法"Action(T)"的类型参数无法从用法中推断出来.尝试显式指定类型参数.
很抱歉,如果之前已经询问过这个问题,但我想简单回答以下两种用法之间的差异.VS似乎接受它们作为有效代码.
private static void doSomeWork()
{
//do some work
}
public someClass()
{
//Thread thread = new Thread(doSomeWork);
//or
//Thread thread = new Thread(new ThreadStart(doSomeWork));
}
Run Code Online (Sandbox Code Playgroud) 在埃里克·利珀特(Eric Lippert)的博客文章中,简短地介绍了协方差和逆方差或方差,以及在《Cut in Nutshell》之类的书中指出:
如果要定义通用委托类型,则好的做法是:
- 将仅在返回值上使用的类型参数标记为协变(out)。
- 将仅在参数上使用的所有类型参数标记为反(in)。
这样做可以通过尊重类型之间的继承关系来使转换自然地工作。
因此,我正在对此进行试验,并且找到了一个相当奇怪的示例。
使用此类的层次结构:
class Animal { }
class Mamal : Animal { }
class Reptile : Animal { }
class Dog : Mamal { }
class Hog : Mamal { }
class Snake : Reptile { }
class Turtle : Reptile { }
Run Code Online (Sandbox Code Playgroud)
在尝试使用方法组到委托的转换和委托到委托的转换时,我编写了以下代码片段:
// Intellisense is complaining here
Func<Dog, Reptile> func1 = (Mamal d) => new Reptile();
// A local method that has the same return type and same parameter …Run Code Online (Sandbox Code Playgroud)