嗨,我有一個簡單的列舉服務,其中定義了一些擴展方法
public enum Service
{
//enum values ..
}
public static class ServiceExtensions
{
internal static string GetSomeCode(this Service service)
{
// Does something
}
//another extension method that calls GetSomeCode()
internal static string GetSomeOtherData(this Service service)
{
// Look at the call for extension method here
string code = GetSomeCode(service);
}
}
我知道呼叫擴展方法的語法類似于呼叫this 指定型別的成員函式。
在上面的例子中,它應該是 -
string code = service.GetSomeCode();
我在專案的其他地方發現了類似的語法使用。我的問題是這兩個電話之間有什么區別。如果不是,那么我應該更喜歡使用哪個?
uj5u.com熱心網友回復:
不,沒有區別。此外,后者service.GetSomeCode()將GetSomeCode(service)在編譯期間轉換為前者 ( ) 。
如果您訪問sharplab.io并粘貼以下代碼:
public enum Service
{
}
public static class ServiceExtensions
{
internal static string GetSomeCode(this Service service)
{
return "";
}
internal static string GetSomeOtherData(this Service service)
{
string code = service.GetSomeCode();
return code;
}
}
然后你會看到反編譯后的代碼是這樣的:
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
[assembly: Extension]
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public enum Service
{
}
[Extension]
public static class ServiceExtensions
{
[Extension]
internal static string GetSomeCode(Service service)
{
return "";
}
[Extension]
internal static string GetSomeOtherData(Service service)
{
return GetSomeCode(service);
}
}
所以,它只是一個語法糖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/417135.html
標籤:
