Comprendre le type généré par le compilateur dans le code décompilé dotPeek

Hei. Je lisais Digi Traffic Accelerator's décompilé source (je pense que c'est la meilleure façon d'apprendre), jusqu'à ce que j'ai obtenu un non-compréhensible code! Veuillez prendre un coup d'oeil:

  internal class ProxyFarm
{
private static Random rand = new Random();
private static Regex UserPassAtHostPort = new Regex("\r\n                ^\r\n                (?<user>[^:]+?) : (?<pass>[^@]+?)\r\n                @\r\n                (?<host>[^:]+? (?: : \\d+)? )\r\n                $", RegexOptions.IgnorePatternWhitespace);
private static Regex HostPortUserPass = new Regex("\r\n                ^\r\n                (?<host>[^:]+? : \\d+) : (?<user>[^:]+?) : (?<pass>.+?)\r\n                $", RegexOptions.IgnorePatternWhitespace);
public const string NEW = "new";
public const string ACTIVE = "active";
public const string BLOCKED_BY_GOOGLE = "blocked by Google";
public const string INACTIVE = "inactive";
public const string CHECKING = "Checking...";
static ProxyFarm()
{
}
public static StorageDataSet.ProxiesRow GetRandomProxy(bool WillUseRecaptcha = true)
{
//some normal code
}
public static WebProxy MakeWebProxy(StorageDataSet.ProxiesRow row)
{
//some normal code
}
public static void CheckProxy(StorageDataSet.ProxiesRow proxy)
{
//ISSUE: object of a compiler-generated type is created
//ISSUE: variable of a compiler-generated type
ProxyFarm.\u003C\u003Ec__DisplayClass5 cDisplayClass5 = new ProxyFarm.\u003C\u003Ec__DisplayClass5();
//ISSUE: reference to a compiler-generated field
cDisplayClass5.proxy = proxy;
//ISSUE: reference to a compiler-generated field
if (cDisplayClass5.proxy == null)
return;
//ISSUE: reference to a compiler-generated field
cDisplayClass5.logger = LogManager.GetLogger("Program");
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated field
cDisplayClass5.state = new ProxyFarm.CallbackState()
{
Proxy = cDisplayClass5.proxy,
Google = ProxyFarm.CheckStatus.NotChecked,
Post = ProxyFarm.CheckStatus.NotChecked
};
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r = (HttpWebRequest) WebRequest.Create("http://www.digitrafficgenerator.com/post_test.php");
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.Method = "POST";
try
{
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.Proxy = (IWebProxy) ProxyFarm.MakeWebProxy(cDisplayClass5.proxy);
}
catch (Exception ex)
{
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated field
cDisplayClass5.logger.Warn((object) ("Invalid proxy entered: " + cDisplayClass5.proxy.Address), ex);
//ISSUE: reference to a compiler-generated field
ProxyFarm.ChangeStatus(cDisplayClass5.proxy, "inactive");
return;
}
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.ConnectionGroupName = Guid.NewGuid().ToString();
//ISSUE: reference to a compiler-generated field
cDisplayClass5.byteArray = Encoding.UTF8.GetBytes("q=test");
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.ContentLength = (long) cDisplayClass5.byteArray.Length;
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.ContentType = "application/x-www-form-urlencoded";
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.Referer = "http://www.digitrafficgenerator.com/post_test.php";
//ISSUE: reference to a compiler-generated field
cDisplayClass5.r.Timeout = 20000;
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated method
IAsyncResult res = cDisplayClass5.r.BeginGetRequestStream(new AsyncCallback(cDisplayClass5.\u003CCheckProxy\u003Eb__1), (object) null);
//ISSUE: reference to a compiler-generated field
WebObject.AbortRequestAfterTimeout(res, cDisplayClass5.r);
try
{
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated method
//ISSUE: reference to a compiler-generated field
res = cDisplayClass5.r.BeginGetResponse(new AsyncCallback(cDisplayClass5.\u003CCheckProxy\u003Eb__2), (object) cDisplayClass5.r);
}
catch (Exception ex)
{
//ISSUE: reference to a compiler-generated field
//ISSUE: reference to a compiler-generated field
cDisplayClass5.logger.Info((object) ("Got an exception using " + cDisplayClass5.proxy.Address), ex);
}
//ISSUE: reference to a compiler-generated field
WebObject.AbortRequestAfterTimeout(res, cDisplayClass5.r);
HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.google.com/recaptcha/api/js/recaptcha.js");
request.Method = "GET";
//ISSUE: reference to a compiler-generated field
request.Proxy = (IWebProxy) ProxyFarm.MakeWebProxy(cDisplayClass5.proxy);
request.Timeout = 20000;
request.ConnectionGroupName = Guid.NewGuid().ToString();
//ISSUE: reference to a compiler-generated method
WebObject.AbortRequestAfterTimeout(request.BeginGetResponse(new AsyncCallback(cDisplayClass5.\u003CCheckProxy\u003Eb__3), (object) request), request);
}
protected static void ProxyChecked(IAsyncResult result, HttpWebRequest req, ProxyFarm.CallbackState state)
{
ILog logger = LogManager.GetLogger("Program");
ProxyFarm.CheckStatus checkStatus = ProxyFarm.CheckStatus.NotOk;
try
{
HttpWebResponse httpWebResponse = (HttpWebResponse) req.EndGetResponse(result);
if (req.RequestUri == httpWebResponse.ResponseUri)
{
if (httpWebResponse.StatusCode == HttpStatusCode.OK)
checkStatus = ProxyFarm.CheckStatus.Ok;
}
}
catch (Exception ex)
{
}
lock (state)
{
if (req.RequestUri.Authority.Contains("google.com"))
state.Google = checkStatus;
else
state.Post = checkStatus;
if (state.Post == ProxyFarm.CheckStatus.NotOk)
{
ProxyFarm.ChangeStatus(state.Proxy, "inactive");
logger.Info((object) ("Marking " + state.Proxy.Address + " as inactive as it cannot POST"));
}
else if (state.Google == ProxyFarm.CheckStatus.NotOk)
{
ProxyFarm.ChangeStatus(state.Proxy, "inactive");
logger.Info((object) ("Marking " + state.Proxy.Address + " as inactive as it is blocked by google"));
}
else
{
if (state.Google != ProxyFarm.CheckStatus.Ok || state.Post != ProxyFarm.CheckStatus.Ok)
return;
ProxyFarm.ChangeStatus(state.Proxy, "active");
}
}
}
public static void ReportBrokenProxy(StorageDataSet.ProxiesRow proxy, bool recaptcha_fail = false)
{
//some normal code
}
private static void ChangeStatus(StorageDataSet.ProxiesRow Proxy, string status)
{
//some normal code
}
public enum CheckStatus
{
NotChecked,
Ok,
NotOk,
}
protected class CallbackState
{
public StorageDataSet.ProxiesRow Proxy { get; set; }
public ProxyFarm.CheckStatus Post { get; set; }
public ProxyFarm.CheckStatus Google { get; set; }
}
}

Comme vous pouvez le voir, il semble que dans CheckProxy méthode, le compilateur a généré un nouveau type! Avez-vous une idée de ce qui se passe vraiment dans cette méthode? Comment puis-je comprendre le code?

source d'informationauteur king.net