Class definition {get; set;}
本文关键字:set get definition Class | 更新日期: 2023-09-27 18:30:51
>我有一个类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;
}
}
}