0

我有一堂课Company

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

像这样:

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

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

4

5 回答 5

4

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

public class Company : Entity  
{    
    private Language l;

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

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

    }
}
于 2013-09-11T09:03:02.663 回答
1

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

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

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

    public Language GetLanguage()
    {
        Language language = new Language(){ Name = this.LanguageName };
        return language;
    }
}
于 2013-09-11T09:06:04.740 回答
1

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

class Company : Entity 
{
   private Language l;

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

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

}
于 2013-09-11T09:06:12.537 回答
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只有在第一次访问该属性时才会创建该对象。

于 2013-09-11T09:08:37.513 回答
0

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

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

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

public class Company : Entity  
{   
    private Language languageCode;

    public Company
    {
        languegeCode = new Language();
    }

    public string LanguageCode
    {  
        get
        {
            return languageCode.Name;
        }
    }
}
于 2013-09-11T09:10:33.300 回答