问题描述
- C#中,用类定义类中的函数,不知道怎么理解?
-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
class Program
{static void Main(string[] args) { Complex z1 = new Complex(73, 89); Complex z2 = new Complex(21, 16); Complex z3 = Complex.Add(z1, z2); } class Complex { public double a; public double b; public Complex(double real, double imagi) { a = real; b = imagi; } public static Complex Add(Complex z1, Complex z2) { return new Complex(z1.a + z2.a, z1.b + z2.b); } } }
}
不能理解静态函数中,用自身类定义类内的函数,应该怎么理解?
解决方案
这有什么不能理解的。静态函数当然可以调用自身类的构造函数,而且这是一种很常见的做法,比如设计模式中的单键模式、工厂模式都是这么做的。
class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton GetInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
解决方案二:
再给一个实际的例子,比如DateTime.Now,它是一个静态属性,内部就调用了DateTime的构造函数
public static DateTime Now {
get {
Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Local);
DateTime utc = UtcNow;
Boolean isAmbiguousLocalDst = false;
Int64 offset = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utc, out isAmbiguousLocalDst).Ticks;
long tick = utc.Ticks + offset;
if (tick>DateTime.MaxTicks) {
return new DateTime(DateTime.MaxTicks, DateTimeKind.Local);
}
if (tick<DateTime.MinTicks) {
return new DateTime(DateTime.MinTicks, DateTimeKind.Local);
}
return new DateTime(tick, DateTimeKind.Local, isAmbiguousLocalDst);
}
}
http://referencesource.microsoft.com/#mscorlib/system/datetime.cs,1cd5dd408a32124f
解决方案三:
这种做法很常见啊,比如DataTable.NewRow静态方法返回一个新建的Row对象
解决方案四:
你不要把它想成有特殊,就当一个普通函数即可,返回的就是自身这个类型的实例
解决方案五:
就是一个引用类型的参数,没什么特殊的啊。
解决方案六:
都不要回答的那么术语话啊,比如一个咖啡机,你点完按钮是想要得到一杯充好的咖啡,出咖啡的过程是你要看到的,**但是在咖啡机内部进行的水和咖啡粉的混合
是不需要你看到的,因为你也用不到这个操作**,所以啊这个配咖啡的过程是类内部的一个函数,而出咖啡的过程是调用了配咖啡这个方法
解决方案七:
调用其它函数,实例化。静态函数只是不能直接访问其它函数。
时间: 2024-11-01 07:15:22