C#中,用类定义类中的函数,不知道怎么理解?

问题描述

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

C#中,用类定义类中的函数,不知道怎么理解?的相关文章

java中什么时候定义类属性用基本数据类型,什么时候用引用数据类型?

问题描述 java中什么时候定义类属性用基本数据类型,什么时候用引用数据类型? 例如什么时候定义Integer i=1; 什么时候定义int i=1; 又如Long i=2; long i=2 求解释 解决方案 Integer.Float等这些叫做"外覆类",相比较int float等类型来说,它们可以被添加到ArrayList等集合中,因为这些集合需要引用类型. 更详细的介绍http://my.oschina.net/u/1861837/blog/335581?fromerr=GTp

javascript中定义类的方法详解

 这篇文章主要详细介绍了javascript中定义类的方法的相关资料,需要的朋友可以参考下     JS中定义类的方式有很多种: 1.工厂方式   代码如下: function Car(){ var ocar = new Object; ocar.color = "blue"; ocar.doors = 4; ocar.showColor = function(){ document.write(this.color) }; return ocar; } var car1 = Car(

javascript中定义类的方法汇总_基础知识

JS中定义类的方式有很多种: 1.工厂方式 复制代码 代码如下:   function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){     document.write(this.color)    };    return ocar;   }   var car1 = Car();   var car2 = Car

obj-c中如何定义类的私有实例方法

obj-c原生没有提供此项机制,不像java有private/protected/public方法的概念.obj-c中的@private以及类似的@protected和@public是用于修饰类的实例变量的而不能修饰方法. 正如obj-c没有类变量可以通过定义static静态变量来解决一样,obj-c中类的私有实例方法也是可以通过分类来模拟的.我们可以将分类定义从类的头文件中转移到类的实现文件中来实现: foo.h #import <Foundation/Foundation.h> @inte

PHP中如何定义类及其成员属性与操作

 类的概念:类是具有相同属性和操作的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和操作说明两个主要部分. 1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操    作........ } 3.定义一个不能被继承的类,使用final

Javascript中如何定义类(class)

将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越庞大的项目. Javascript代码的复杂度也直线上升.单个网页包含10000行Javascript代码,早就司空见惯.2010年,一个工程师透露,Gmail的代码长度是443000行! 编写和维护如此复杂的代码,必须使用模块化策略.目前,业界的主流做法是采用"面向对象编程".因此,Ja

Javascript中定义类

Javascript 本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的 virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象. 一:定义类并创建类的实例对象 在Javascript中,我们用function来定义类,如下: function Shape() { var x = 1 ; var y = 2 ; } 你 或许会说

struct与class关键字在定义类中的区别

struct关键字是从C语言中继承过来的,class和struct均可定义类,用它们定义类的唯一差别在于默认的成员保护级别和默认的继承保护级别(P57--第57页,2.8--章节2.8:P485,15.2.5): 默认情况下,struct的保护级别为public,而class的保护级别为private. 下面分别就这两种情况进行举例: 例1:默认的成员保护级别 [cpp] view plaincopyprint? struct S_Base {       int foo(int) { retu

web-仅在类定义上有 [ScriptService] 特性的 Web 服务才能从脚本中调用。

问题描述 仅在类定义上有 [ScriptService] 特性的 Web 服务才能从脚本中调用. 仅在类定义上有 [ScriptService] 特性的 Web 服务才能从脚本中调用. 解决方案 在.net3.5中,访问web服务,要对web服务添加修饰:[System.Web.Script.Services.ScriptService] 否则,当.ajax()请求服务时,会有异常:只能从脚本中调用在类定义上有[ScriptService]属性的 Web 服务 解决方案二: 在你的方法前面加上[