Class definition {get; set;}



>我有一个类Company .

在我的类中,我想声明一个字符串LanguageCode它从另一个类Language获取值。

喜欢这个:

public class Company : Entity  
{    
    public string LanguageCode
     {  
         get
         {
            Language l = new Language();              
            string language = l.Name;
            return language;
         }
         set { ;}
     }
}

运行时我没有收到任何错误,但是在 get {} 中创建类的新实例是正确的方法;

在构造函数中创建一个语言对象

public class Company : Entity  
{    
    private Language l;
    public Company()
    {
        l = new Language();  
    }
    public string LanguageCode
    {  
     get
        {
            string language = l.Name;
            return language;
        }
    }
}

属性不应有副作用。您通常不会在那里创建其他类的实例,在这种情况下,这根本没有意义。如果需要执行方法来获取值,则可能应该使用方法而不是属性来返回该值。属性不应该是"昂贵的",如果他们需要使用另一种方法,它们也应该是一种恕我直言的方法。

我假设您将语言的名称存储在此类中,并且您想根据此名称返回Language对象:

public class Company : Entity
{
    public string LanguageName{ get;set; }
    public Language GetLanguage()
    {
        Language language = new Language(){ Name = this.LanguageName };
        return language;
    }
}

你的解决方案不是很明智。每次调用getter时,您都会获得新的语言实例。我相信,你应该在你的类中声明语言实例。

class Company : Entity 
{
   private Language l;
    public Company()
    {
        this.l = new Language();  
    }
   public string LanguageCode
     {  
         get
         {            
            return this.l.Name;
         }         
     }
}

在我看来,这不是一个好的做法,因为每次你得到这个属性 - 新对象都会被实例化。

我将创建一个私有属性并将实际字符串存储在其中:

public class Company : Entity  
{   
    private string _languageCode 
    public string LanguageCode
     {  
         get
         {
            if (String.IsNullOrEmpty(_languageCode) 
            {
               Language l = new Language();              
               _languageCode = l.Name;
            }
            return _languageCode
         }
     }
}

这样,只有在首次访问属性后,才会创建Language对象。

首先,正如其他人已经建议的那样,如果您的集合为空,那么最好将其删除以使属性明确为只读。

然后,虽然它在形式上是正确的,但我看不到这个getter的逻辑。每次都会实例化一个新类,并且返回值始终相同。

如果你只需要返回带有语言名称的字符串,你可以声明一个私有属性 languageCode,在构造函数中初始化它,然后用公共 getter 公开它,如下所示:

public class Company : Entity  
{   
    private Language languageCode;
    public Company
    {
        languegeCode = new Language();
    }
    public string LanguageCode
    {  
        get
        {
            return languageCode.Name;
        }
    }
}

最新更新