解释此C#代码以登录youtube

nar*_*tra 0 c# oop syntax

我从stackoverflow中的某处获得了这段代码.我无法理解.它用于登录youtube.我是C#和OOPS的新手.所以任何人都可以向我解释几句话:

1)在第3行

 HttpWebRequest request = GetNewRequest("https://accounts.google.com/ServiceLoginAuth", cookies);
Run Code Online (Sandbox Code Playgroud)

HttpWebRequest是一个类,请求是一个对象.但为什么之后不使用New关键字呢?什么是"GetNewRequest"?这是一种方法吗?大多数时候我们使用New关键字的类的构造函数.那么我可以得出结论,我可以使用该类中的任何方法吗?没有必要使用new关键字和构造函数?

2)在第6行

Dictionary<string, string> parameters = new Dictionary<string, string>
Run Code Online (Sandbox Code Playgroud)

字典是类,参数是对象.但这是什么<string, string>?我从未见过参数可以传递给一个类.

3)在第7行

{
        {"continue","https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26feature%3Dsign_in_button%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252F"},
        {"service","youtube"},{"uilel","3"},{"dsh","157212168103955870"},{"hl","en_US"},
        {"GALX","PTqcwpZb2aE"},{"pstMsg","1"},{"dnConn",""}, {"checkConnection","youtube%3A248%3A1"}, 
        {"checkedDomains","youtube"}, {"timeStmp",""}, {"secTok",""}, {"Email","username"}, {"Passwd","password"}, 
        {"signIn","Sign+in"}, {"PersistentCookie","yes"}, {"rmShown","1"}};
Run Code Online (Sandbox Code Playgroud)

我不明白这是什么?它不适合我在C#中读到的任何语法.这是我以前从未见过的.

完整的代码

public void Login()
{
    HttpWebRequest request = GetNewRequest("https://accounts.google.com/ServiceLoginAuth", cookies);
    request.Referer = "https://accounts.google.com/ServiceLogin?passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26feature%3Dsign_in_button%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252F&uilel=3&hl=en_US&service=youtube";
    request.Host = "accounts.google.com";
    Dictionary<string, string> parameters = new Dictionary<string, string>{
        {"continue","https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26feature%3Dsign_in_button%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252F"},
        {"service","youtube"},{"uilel","3"},{"dsh","157212168103955870"},{"hl","en_US"},
        {"GALX","PTqcwpZb2aE"},{"pstMsg","1"},{"dnConn",""}, {"checkConnection","youtube%3A248%3A1"}, 
        {"checkedDomains","youtube"}, {"timeStmp",""}, {"secTok",""}, {"Email","username"}, {"Passwd","password"}, 
        {"signIn","Sign+in"}, {"PersistentCookie","yes"}, {"rmShown","1"}};
    HttpWebResponse response = MakeRequest(request, cookies, parameters);
    response.Close();
}
Run Code Online (Sandbox Code Playgroud)

Hac*_*ese 5

  1. GetNewRequest将是一个实际创建并返回实例的方法HttpWebRequest.所以,new在打电话之前不需要GetNewRequest.new仅当您在声明的同一行中调用类型的构造函数时才需要它.
  2. <string, string>声明之后Dictionary指定键和值的类型,因为Dictionary<TKey, TValue>是一个泛型类型.
  3. 这是一种使用键/值对列表初始化字典的方法.这只是语法糖.请参见对象初始化.它只是让你的生活更轻松/代码更简洁.该代码相当于更详细:

_

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("continue","https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26feature%3Dsign_in_button%26nomobiletemp%3D1%26hl%3Den_US%26next%3D%252F");
parameters.Add("service","youtube");
// etc.
Run Code Online (Sandbox Code Playgroud)