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对象
调用其它函数,实例化。静态函数只是不能直接访问其它函数。
你不要把它想成有特殊,就当一个普通函数即可,返回的就是自身这个类型的实例
就是一个引用类型的参数,没什么特殊的啊。
都不要回答的那么术语话啊,比如一个咖啡机,你点完按钮是想要得到一杯充好的咖啡,出咖啡的过程是你要看到的,**但是在咖啡机内部进行的水和咖啡粉的混合
是不需要你看到的,因为你也用不到这个操作**,所以啊这个配咖啡的过程是类内部的一个函数,而出咖啡的过程是调用了配咖啡这个方法