开发者

Extension methods require declaring class to be static

开发者 https://www.devze.com 2022-12-28 06:48 出处:网络
Why do extension methods req开发者_运维知识库uire the declaring class to be static? Is it a compiler requirement?It\'s dictated in the language specification, section 10.6.9 of the C# 4 spec:

Why do extension methods req开发者_运维知识库uire the declaring class to be static? Is it a compiler requirement?


It's dictated in the language specification, section 10.6.9 of the C# 4 spec:

When the first parameter of a method includes the this modifier, that method is said to be an extension method. Extension methods can only be declared in non-generic, non-nested static classes. The first parameter of an extension method can have no modifiers other than this, and the parameter type cannot be a pointer type.

It's not clear to me why all of these restrictions are necessary - other than potentially for compiler (and language spec) simplicity. I can see why it makes sense to restrict it to non-generic types, but I can't immediately see why they have to be non-nested and static. I suspect it makes the lookup rules considerably simpler if you don't have to worry about types contained within the current type etc, but I dare say it would be possible.

I suspect that the extra complexity of not having these restrictions was deemed less than the benefit gained.

EDIT: Just to be clear, I'm not suggesting that it would make sense to have instance methods as extension methods - I'm suggesting that it would make sense to have a static extension method in a nested and/or non-static class.

0

精彩评论

暂无评论...
验证码 换一张
取 消