代码之家  ›  专栏  ›  技术社区  ›  Jason Shave

在vs.创建后设置C#对象的属性

c#
  •  0
  • Jason Shave  · 技术社区  · 6 年前

    有人能帮我理解创建对象实例并在创建过程中传递值与创建对象然后设置属性之间的区别吗?

    当我在对象创建上设置跟踪时,我可以看到 domainName , id guid guid 总而言之。是因为我的SASReadToken值为'null'而停止吗?

    这样做有效:

    TenantEntityModel tenantEntity = new TenantEntityModel
    {
        PartitionKey = domainName,
        RowKey = id,
        SASReadToken = null,
        ApiKey = guid
    };
    TableOperation tableOperation = TableOperation.Insert(tenantEntity);
    

    guid

    TenantEntityModel tenantEntity = new TenantEntityModel(domainName, id, null, guid);
    TableOperation tableOperation = TableOperation.Insert(tenantEntity);
    

    这是我的课:

    public class TenantEntityModel : TableEntity
    {
        public string SASReadToken { get; set; }
        public Guid ApiKey { get; set; }
    
        public TenantEntityModel(string TenantDomainName, string Id, string SASReadToken, Guid ApiKey)
        {
            this.PartitionKey = TenantDomainName;
            this.RowKey = Id;
        }
    
        public TenantEntityModel() { }
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   vasily.sib    6 年前

    TenantEntityModel(string, string, string, Guid) 您没有设置 ApiKey

    public class TenantEntityModel : TableEntity
    {
        public string SASReadToken { get; set; }
        public Guid ApiKey { get; set; }
    
        public TenantEntityModel(string TenantDomainName, string Id, string SASReadToken, Guid ApiKey)
        {
            this.PartitionKey = TenantDomainName;
            this.RowKey = Id;
            this.SASReadToken = SASReadToken;
            this.ApiKey = ApiKey;
        }
    
        public TenantEntityModel() { }
    }
    

    注意,此代码: new TenantEntityModel {...} 不是一个 “将参数传递给构造函数” ,但是

    备注:

    对于我来说,我通常不会通过构造函数使用公共可用的setter设置属性,因为您可以像在代码示例中一样:

    var tenantEntity = new TenantEntityModel
    {
        PartitionKey = domainName,
        RowKey = id,
        SASReadToken = null,
        ApiKey = guid
    };
    

    PartitionKey RowKey setter是公开的(如我所见),您的构造函数 基本上没用。

        2
  •  4
  •   Nigel Whatling    6 年前

    当您这样做时:

    TenantEntityModel tenantEntity = new TenantEntityModel
    {
        PartitionKey = domainName,
        RowKey = id,
        ApiKey = guid
    };
    

    你正在有效地做到这一点:

    TenantEntityModel tenantEntity = new TenantEntityModel();
    tenantEntity.PartitionKey = domainName;
    tenantEntity.RowKey = id;
    tenantEntity.ApiKey = guid;
    

    这不应与将参数传递给构造函数(在第二个示例中是这样做的)相混淆。你的构造函数对 SASReadToken ApiKey 参数。这就是为什么他们被忽视。

    如果你想让你的构造器来做这项工作,你需要一些类似的东西:

    public TenantEntityModel(string TenantDomainName, string Id, string SASReadToken, Guid ApiKey)
    {
        this.PartitionKey = TenantDomainName;
        this.RowKey = Id;
        this.SASReadToken = SASReadToken;
        this.ApiKey = ApiKey;
    }