2014-04-19 52 views
0

这是我的课怎么抱我上次访问路径:如果我有只有一个静态变量的类 - 我应该声明这个类是静态的吗?

public class LastPath 
{ 
    private static string _lastPath; 

    public static string lastPath 
    { 
     get { return _lastPath; } 
     set { _lastPath = value; } 
    } 
} 
+0

你的代码是好的不要让getter setter把它变成公共字段 –

+0

有一点要记住:静态类上的Settable属性_may_表示一个设计,你依赖于全局/共享的可变状态,这会导致一些微妙的错误(某人,某处将其设置为某个其他值,现在的东西正在其他地方打破)。不知道确切的代码是不可能的,只是想一想。 –

回答

2

如果一个类的所有成员是静态的,你的类并不意味着实例化,它应该是static

在这种情况下,您的班级满足上述规则或指导原则,因此将其标记为static将有意义,因为您没有任何实例成员。

LastPath path = new LastPath(); 
path.????// Nothing to access, so prevent instantiation by marking class static. 

是说,如果你在你的类和方法只有一个领域我认为,你也许并不需要一个类可言,只是将其重构到一些其他类的地方才有意义。

2

我会说你这样做:

public static class LastPath 
{ 
    public static string lastPath 
    { 
     get;set; 
    } 
} 

你应该把它声明为static静态类不能被实例化,但非静态类可以被实例化,这是不需要的。

+0

我的get \ set有什么问题?两者之间有什么区别? – user3328870

+0

@ user3328870,区别不大。你不需要创建一个单独的领域和所有这些东西。 C#会为你做;) –

2

使类的静态和使公共财产为静态和你做,这样的:

public static class LastPath 
{ 

    public static string lastPath { get;set;} 

} 
+0

我的get \ set有什么问题?两者之间有什么区别? – user3328870

+0

你的也很好,但在.net framerwork 3.5及以上版本中,你可以让这样的getter setter无需私人领域 –

1

首先 - 我看起来很奇怪创建类来保存单个变量。考虑使用简单的字符串变量lastVisitedPath。如果你在单个类中使用这个变量,那么把它变成这个类的字段。

第二 - 命名不是很可读。以下是获取最后路径的方式:LastPath.lastPath。你看到这个无用的重复?另外请记住,由于Microsoft命名准则,公共成员应该拥有Pascal Case名称。考虑创建具有描述性的名称类像GlobalValuesCache体现其目的:

public static class GlobalValues // holds values which are globally accessible 
{ 
    public static string LastVisitedPath; 
    // other global values 
} 

这样使用会像GlobalValues.LastVisitedPathCache.LastVisitedPath。当然,如果这些类不应该被实例化,它们应该是静态的。

相关问题