C# “是什么意思?”;得到“;?

C# “是什么意思?”;得到“;?,c#,properties,C#,Properties,可能重复: 我正在使用开源项目。在这个项目中有一个功能 public virtual ICollection<Customer> AffiliatedCustomers { get { return _affiliatedCustomers ?? (_affiliatedCustomers = new List<Customer>()); } protected set { _affiliatedCustomers

可能重复:

我正在使用开源项目。在这个项目中有一个功能

public virtual ICollection<Customer> AffiliatedCustomers 
{
    get
    {
         return _affiliatedCustomers ?? (_affiliatedCustomers = new List<Customer>()); 
    }
    protected set { _affiliatedCustomers = value; }
 }
公共虚拟ICollection附属客户
{
得到
{
返回_affiliatedCustomers???(_affiliatedCustomers=新列表());
}
受保护集{u affiliatedCustomers=value;}
}
我不明白“得到”是什么意思。
您能解释一下这个功能吗。

附属客户
是一种财产

public virtual ICollection<Customer> AffiliatedCustomers 
{
    get
    {
         return _affiliatedCustomers ?? (_affiliatedCustomers = new List<Customer>()); 
    }
    protected set { _affiliatedCustomers = value; }
 }
get
定义了属性getter,它是一个在内部用于返回属性值的方法。它允许您在给定的类实例中使用此函数,如下所示:

var customers = theClass.AffiliatedCustomers; // Looks like a field, but is a property
属性也可以有一个
set
部分,就像这个部分一样(
protectedset{{u affiliatedCustomers=value;}
),它让您可以控制通过属性设置值时发生的情况


有关详细信息,请参阅。

附属客户
是一个属性

get
定义了属性getter,它是一个在内部用于返回属性值的方法。它允许您在给定的类实例中使用此函数,如下所示:

var customers = theClass.AffiliatedCustomers; // Looks like a field, but is a property
属性也可以有一个
set
部分,就像这个部分一样(
protectedset{{u affiliatedCustomers=value;}
),它让您可以控制通过属性设置值时发生的情况

有关详细信息,请参见。

这是一个属性, msdn引用:

属性是提供灵活机制来读取、写入或计算私有字段值的成员。属性可以像公共数据成员一样使用,但实际上它们是称为访问器的特殊方法。这使得数据可以轻松访问,同时还提供了方法的安全性和灵活性

有关更多信息,请参阅此链接: 这是一项财产, msdn引用:

属性是提供灵活机制来读取、写入或计算私有字段值的成员。属性可以像公共数据成员一样使用,但实际上它们是称为访问器的特殊方法。这使得数据可以轻松访问,同时还提供了方法的安全性和灵活性

有关更多信息,请参阅此链接:

属性有一个getter和setter——它们的目的是显而易见的(获取和设置属性的值)


使用自动属性时,仍然有一个
get
和一个
set
,但支持变量会自动为您实现。在您给出的示例中,代码作者选择拥有自己的
get
实现—在这种情况下,在首次访问属性时自动初始化成员变量。

属性有一个getter和setter—它们的目的很明显(获取和设置属性的值)


使用自动属性时,仍然有一个
get
和一个
set
,但支持变量会自动为您实现。在您给出的示例中,代码作者选择了自己的
get
-在这种情况下,在首次访问属性时自动初始化成员变量。

这不是一个函数。这是一种财产。属性基本上是某个变量的花式包装。例如,声明以下属性:

public string SomeProperty { get; set; }
将实际编译为如下内容:

private string backing_SomeProperty;

public void set_SomeProperty(string value)
{
    backing_SomeProperty = value;
}

public int get_SomeProperty()
{
    return backing_SomeProperty;
}
public string SomeProperty
{
    get
    {
        // some logic code here
        // then return some value
    }

    set
    {
        // some logic code here
        // then set some value
    }
}
这是一个自动属性的示例。当然,您也可以自己定义getter和setter方法,如下所示:

private string backing_SomeProperty;

public void set_SomeProperty(string value)
{
    backing_SomeProperty = value;
}

public int get_SomeProperty()
{
    return backing_SomeProperty;
}
public string SomeProperty
{
    get
    {
        // some logic code here
        // then return some value
    }

    set
    {
        // some logic code here
        // then set some value
    }
}

这不是一个函数。这是一种财产。属性基本上是某个变量的花式包装。例如,声明以下属性:

public string SomeProperty { get; set; }
将实际编译为如下内容:

private string backing_SomeProperty;

public void set_SomeProperty(string value)
{
    backing_SomeProperty = value;
}

public int get_SomeProperty()
{
    return backing_SomeProperty;
}
public string SomeProperty
{
    get
    {
        // some logic code here
        // then return some value
    }

    set
    {
        // some logic code here
        // then set some value
    }
}
这是一个自动属性的示例。当然,您也可以自己定义getter和setter方法,如下所示:

private string backing_SomeProperty;

public void set_SomeProperty(string value)
{
    backing_SomeProperty = value;
}

public int get_SomeProperty()
{
    return backing_SomeProperty;
}
public string SomeProperty
{
    get
    {
        // some logic code here
        // then return some value
    }

    set
    {
        // some logic code here
        // then set some value
    }
}