我有一个班级Company
。
在我的课程中,我想声明一个字符串LanguageCode
,它获取的是另一个类Language
的值。
像这样:
public class Company : Entity
{
public string LanguageCode
{
get
{
Language l = new Language();
string language = l.Name;
return language;
}
set { ;}
}
}
运行时我没有收到任何错误,但是在get {}中创建类的新实例是正确的方法;
答案 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;
}
}
}