Pho*_*nic 1 c# class curly-braces
我遇到了这个代码,我不知道它是什么或目的是什么.
A级
internal class RequestBase<T>
{
public RequestBase()
{
ID = Helper.GetNextId().ToString(CultureInfo.InvariantCulture);
}
public RequestBase(string method, T @params)
: this()
{
Method = method;
Parameters = @params;
}
[DataMember(Name = "id")]
public string ID { get; private set; }
[DataMember(Name = "method")]
public string Method { get; set; }
[DataMember(Name = "params")]
public T Parameters { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
B级
[DataContract]
internal class AuthenicateRequest
{
[DataMember(Name = "api_key", IsRequired = true)]
public string APIKey { get; set; }
[DataMember(Name = "secret_key", IsRequired = true)]
public string SecretKey { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以这是我不理解的部分.
var requestObj = new RequestBase<AuthenicateRequest>
{
Method = "auth.accessToken",
Parameters = new AuthenicateRequest
{
APIKey = api_key,
SecretKey = secret_key
}
};
Run Code Online (Sandbox Code Playgroud)
Q1:在参数部分中,如何在不执行ClassB.APIKey = api_key的情况下将api_key传递给ClassB APIKey?
Q2:为什么要启动Parameters = new AuthenicateRequest {APIKey = api_key,SecretKey = secret_key}而不是参数= new AuthenicateRequest(api_key,secret_key)?
我有更多问题要问,但我想我最好把它放在一个单独的帖子中.
这些被称为对象初始化器.它们允许您使用更简洁的语法设置新构造的对象的属性.它们的行为与构造新对象完全相同,然后将这些属性逐个设置为新语句.
请参阅:https://msdn.microsoft.com/en-us/library/bb384062.aspx
这个:
var requestObj = new RequestBase<AuthenicateRequest>
{
Method = "auth.accessToken",
Parameters = new AuthenicateRequest
{
APIKey = api_key,
SecretKey = secret_key
}
};
Run Code Online (Sandbox Code Playgroud)
完全等同于:
var requestObj = new RequestBase<AuthenicateRequest>();
requestObj.Method = "auth.accessToken";
requestObj.Parameters = new AuthenticateRequest();
requestObj.Parameters.APIKey = api_key;
requestObj.Parameters.SecretKey = secret_key;
Run Code Online (Sandbox Code Playgroud)
请注意,如果构造函数需要参数,则无论使用哪种语法,都必须在括号内指定这些参数,例如:
var x = new Foo(someParam) {
SomeProperty = "foobar",
OtherProperty = 4
};
Run Code Online (Sandbox Code Playgroud)
这是一样的
var x = new Foo(someParam);
x.SomeProperty = "foobar";
x.OtherProperty = 4;
Run Code Online (Sandbox Code Playgroud)