类定义{get;组;}

时间:2013-09-11 08:57:41

标签: c#

我有一个班级Company

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

像这样:

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

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

5 个答案:

答案 0 :(得分:4)

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

public class Company : Entity  
{    
    private Language l;

    public Company()
    {
        l = new Language();  
    }

    public string LanguageCode
    {  
     get
        {
            string language = l.Name;
            return language;
        }

    }
}

答案 1 :(得分:1)

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

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

public class Company : Entity
{
    public string LanguageName{ get;set; }

    public Language GetLanguage()
    {
        Language language = new Language(){ Name = this.LanguageName };
        return language;
    }
}

答案 2 :(得分:1)

你的解决方案不是很明智。每次,你打电话给getter,你都会得到新的语言实例。我相信,你应该在课堂上声明语言实例。

class Company : Entity 
{
   private Language l;

    public Company()
    {
        this.l = new Language();  
    }

   public string LanguageCode
     {  
         get
         {            
            return this.l.Name;
         }         
     }

}

答案 3 :(得分:0)

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

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

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对象。

答案 4 :(得分:0)

首先,正如其他人已经建议的那样,如果您的设置为空,那么最好将其删除以使该属性显示为只读。

然后,虽然它是正式的,但我没有看到这个吸气剂的逻辑。每次都会实例化一个新类,返回值始终相同。

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

public class Company : Entity  
{   
    private Language languageCode;

    public Company
    {
        languegeCode = new Language();
    }

    public string LanguageCode
    {  
        get
        {
            return languageCode.Name;
        }
    }
}