2011-02-17 49 views
2

我从Java世界即将结束,这个结构是推动我坚果:理解C#属性的语法和getter/setter方法

private static string _muiUrl; 

    private static string MUIUrl 
    { 
     get 
     { 
      if (String.IsNullOrEmpty(_muiUrl)) 
      { 
       using (var db = new IntLMPDB()) 
       { 
        _muiUrl = 
         (from c in db.Control where c.ControlKey == "MUI_Url" select c.ControlValue).FirstOrDefault(); 
       } 
      } 
      return _muiUrl; 
     } 
    } 

当我看到,在一类,我想用在该属性班级本身,我应该怎么称呼它?

回答

3

简单如下:

var result = TypeWithMUIURLProperty.MUIUrl; 

可以如其他人所说省略类的名字,但是,明确性,我将它留在这个例子。

+1

-1这是一个静态属性。您无法使用`this`关键字访问静态属性。 – 2011-02-17 18:50:46

+0

我的编辑和您的输入似乎有重叠。 – 2011-02-17 18:52:32

0

从课内,只要写MUIUrl应该可以。这会拉一个初始化的值,并强制延迟实例化。

如果它是公开的,并且您从其他地方访问它,则需要编写YourClassName.MUIUrl。但由于它是私人的,这是不必要的。

此外,只需使用MUIUrl即可在实例或其他静态成员中使用。

1

类里面,你并不需要在所有限定属性名称,即你写的只是

string url = MUIUrl; 

只好不仅仅是private财产被一些“更好”,从完全访问属性不同的类,你需要使用类名出线它(但你被允许这样做,甚至里面的类,它只是不要求),即

string url = ThatClassYouDidNotName.MUIUrl; 

(边备注:此变种懒惰初始化通常不是线程安全的。)

0

当我实现具有专用后备存储的自加载属性时,我遵循从不与后备存储交互的约定,请始终从属性中读取。

我觉得你需要私人领域很愚蠢,我觉得这种类型的代码应该继承{get; set;}的内部,你应该隐式地访问属性类型的一个字段,无论你是直接使用还是掉落回到默认的自动属性接线。

0

如果结构是驾驶你疯了,这里的某种解释,评论

private static string _muiUrl; 
public static string MUIUrl 
{ 
    get 
    { 
     //if the variable is null or empty 
     if (String.IsNullOrEmpty(_muiUrl)) 
     { 
      //using defines a scope, outside of which an object or objects will be disposed. 
      //http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx 
      using (var db = new IntLMPDB()) 
      { 
       //this is linq 
       //a simple example will be 
       //http://stackoverflow.com/questions/214500/which-linq-syntax-do-you-prefer-fluent-or-query-expression 
       _muiUrl = (from c in db.Control 
          where c.ControlKey == "MUI_Url" 
          select c.ControlValue 
         ).FirstOrDefault(); 
       //or another linq syntax will be 
       //_muiUrl= db.Control 
       //  .Where(c => c.ControlKey == "MUI_Url") 
       //  .FirstOrDefault() 
       //  .ControlValue; 
      } 
     } 
     return _muiUrl; 
    } 
} 

特意给该属性的访问修饰符为public,因为它的你怎么称呼它之外的类(随意把它变成私有如果是这样的话)。

现在把它作为,

ClassName.MUIUrl