【发布时间】:2011-10-25 21:48:57
【问题描述】:
我了解静态类和静态类成员的概念,但我确信我可以在我的项目中更多地使用它们。有人可以向我展示一些他们在 C# 中创建和使用静态类的实际示例吗?
谢谢
【问题讨论】:
-
无法实例化静态类。您可能需要多个实例,例如“发票”类。您不希望有多个实例,例如“生成语句”类。
我了解静态类和静态类成员的概念,但我确信我可以在我的项目中更多地使用它们。有人可以向我展示一些他们在 C# 中创建和使用静态类的实际示例吗?
谢谢
【问题讨论】:
静态类和方法最实用的用途是创建扩展方法。就像 Linq Query 扩展方法一样。
【讨论】:
实用程序类、Helper 类、转换类...任何放在实例上没有意义但与其他类实例一起使用的方法组都是很好的候选对象。还有很多其他的例子——这些只是其中的一小部分。
【讨论】:
我使用static 类的大部分时间是用于工具、实用程序功能。
【讨论】:
静态类(使用 static 关键字)是一个既是抽象类又是密封类的类。因此允许使用静态成员。 您需要使用静态类来实现扩展方法,因为这是由 c# 编译器仲裁的。
【讨论】:
任何时候您需要在您的设计中表示一个流程,而不是一个实体,或者值,您应该使用静态类。 Process 是设计中的对象或事物,它没有状态,但可以操纵或管理其他对象的状态。它将具有不涉及类本身的私有或公共状态变量的静态方法,而仅对传递给这些方法的对象的公共属性进行操作。
一些示例可能包括为学术机构执行调度功能的类,
或负责在入境口岸处理货运和运输集装箱以装载到船舶或飞机上的类。
【讨论】:
考虑单例模式 - 你想使用一个实例并且只使用一个实例:
public class MySingleton
{
protected static Lazy<MySingleton> _instance = new Lazy<MySingleton>(() => new MySingleton());
protected MySingleton() {}
public static MySingleton Instance
{
get { return _instance.Value; }
}
}
类的构造方式,你只能使用一个实例,存储在静态变量中。考虑HttpContext.Current 静态属性。
此外,静态项对于状态维护很有用;假设你想在内存中缓存一些任何实例都需要的数据,但不需要重新获取数据。
您还需要为扩展方法创建静态类。
【讨论】:
静态类就像一个容器,用于保存方法和其他数据。
考虑一个数学实用程序类。您不想创建 MathUtility 的实例,但您可以定义一个常量(例如 PI)或一些用于数学功能的方法(static double sqrt(double))。
您可以在非静态类中完成所有这些事情;但他们可能与他们所属的班级没有太大关系。
它们也是扩展方法所必需的 - 允许您增强预定义类的功能。
请参阅 link 了解 C# 中的数学类。
【讨论】:
响应您对扩展方法示例的请求,这会将字符串的第一个字母大写。
public static class StringExtensions
{
public static string UppercaseFirst(this String s)
{
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
char[] a = s.ToCharArray();
a[0] = char.ToUpper(a[0]);
return new string(a);
}
}
代码中的其他地方,你可以像这样使用它
var pirate = "yar";
System.Diagnostics.Debug.WriteLine(pirate.UppercaseFirst());
//Yar
【讨论】: