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);
        }
    }
}

}

不能理解静态函数中,用自身类定义类内的函数,应该怎么理解?

1

7个回答

这有什么不能理解的。静态函数当然可以调用自身类的构造函数,而且这是一种很常见的做法,比如设计模式中的单键模式、工厂模式都是这么做的。

 class Singleton
{
    private static Singleton instance;
        private Singleton() { }
        public static Singleton GetInstance()
        {
            if (instance == null)
                    instance = new Singleton();
                return instance;
        }
}
5

再给一个实际的例子,比如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

5

这种做法很常见啊,比如DataTable.NewRow静态方法返回一个新建的Row对象

5

你不要把它想成有特殊,就当一个普通函数即可,返回的就是自身这个类型的实例

3

就是一个引用类型的参数,没什么特殊的啊。

2

都不要回答的那么术语话啊,比如一个咖啡机,你点完按钮是想要得到一杯充好的咖啡,出咖啡的过程是你要看到的,**但是在咖啡机内部进行的水和咖啡粉的混合
是不需要你看到的,因为你也用不到这个操作**,所以啊这个配咖啡的过程是类内部的一个函数,而出咖啡的过程是调用了配咖啡这个方法

2

调用其它函数,实例化。静态函数只是不能直接访问其它函数。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#学习日记13---类(Class)的声明与定义
类作为面向对象的灵魂,在C#中有着相当广泛和深入的应用,对类的深度掌握自然是我们学习C#重要的一个环节.有关类的意义上一篇  C#学习日记12---引用类型 中已经给出了,这里就不再重复了.说到 类 就不得不说下与之息息相关的内容----对象. 类与对象:            类:  从具有相同属性的事物当中抽象出来的概念,一般用来描述同类个体的集合。     对象:  从类当中具
【c#】定义类成员(字段、方法、属性)
成员定义 public----成员可以由任何代码访问private----成员只能由类中的代码访问(如果没有使用任何关键字,默认使用这个关键字)internal----成员定只能由义他的程序集(命名空间)内部的代码访问protected----成员只能由类或派生类的代码访问protect和internal也可以结合使用   protected internal ,表示它们只能由项目中
C++中的struct也能定义类!!!
本博参考了以下博客:http://www.cnblogs.com/ccsccs/articles/4025215.html 一、struct 新功能介绍 1、stuct用构造函数赋值struct A { int a; int b; A() //构造函数 { a=0; b=0; } }2、struct可以实现封装、继承,
python 中三种定义类的方式
在Python中方,有三种定义类的方法: 常规方式、@classmethod修饰方式、@staticmethod修饰方式 class类定义 In [1]: class A: ...: def common(self,x): ...: print &quot;executing common(%s,%s)&quot;% (self,x) ...: pri...
Python中的类概念理解
Python编程中类的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个类,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭、走路和睡觉等功能。具体的形式如下:# 例:类的概念 class 人类: 名字 = '未命名' # ...
Python类定义和类继承详解
http://www.jb51.net/article/65700.htm 一、类定义: ? 1 2 class :    类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象   类的私有属性: __
JS面向对象教程
JavaScript中支持面向对象的基础,用定义函数的方式定义类,用定义函数的方式定义类
JavaScript 类的四种定义方法
类的四种定义方法// 工厂模式function Car(name, color, price) { var tempcar = new Object; tempcar.name = name; tempcar.color = color; tempcar.price = price; tempcar.getCarInfo = function () { console.log(`name: ${...
asp类的定义方法和使用方法实例
<% 02 class myclass 03 '这里是定义类的局部变量,需要定义成private类型的变量,不可以直接对这些变量赋值 04 private str_title 05 private str_author 0607 '这是类初始化的时候自动运行下面代码 08 private sub class_in
VS2015基础 如何知道一个类的命名空间
       慈心积善融学习,技术愿为有情学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication...
JavaScript中定义类的方式详解
这篇文章主要介绍了JavaScript中定义类的方式,结合实例形式分析了JavaScript实现面向对象类的定义及使用相关技巧,并附带了四种JavaScript类的定义方式,需要的朋友可以参考下 本文实例讲述了JavaScript中定义类的方式。分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,
matlab中自定义类
matlab中自定义类的格式为: classdef classname properties PropName end methods methodName end events EventName end enumeration EnumName end end例如classdef BasicCla
matlab中定义类、面向对象编程
Matlab也可以写面向对象的代码,首先表现在可以定义类,可以继承,使用类(class)有很多好处,其中一个重要的好处便是解决变量名冲突和让函数、对象的结构清晰。class的static function可以在不定义类的实例直接调用类的成员函数,比如:classdef tools &amp;lt; handle methods (Static = true) functio...
es5 编写类风格的代码
JavaScript可以让我们通过原型实现继承,许多开发人员,尤其是那些有传统面向对象背景的开发人员,都希望将JavaScript的继承系统简化并抽象成一个他们更熟悉的系统。rnrn所以,这不可避免地引导我们走向类的领域。类是面向对象开发人员所期望的内容,尽管JavaScript本身不支持传统的类继承。rnrn通常,这些开发人员希望它有如下特性:rnrn一套可以构建新构造器函数和原型的轻量级系统一
python学习——类中为什么要定义__init__()方法
学习Python的类,一直不太理解为什么一定要定义init()方法,现在简要谈一下自己的理解吧。1、不用init()方法定义类 定义一个矩形的类,目的是求周长和面积。class Rectangle(): def getPeri(self,a,b): return (a + b)*2 def getArea(self,a,b): return a*br
Vue类重构代码——02 开始:一个简单的类
前言: 上文总结: 接上文《 Vue类重构代码——01 准备:提取工具类方法》总结,上文主要做的且本文及以后还可以用到的有用功是:将获取数据的方法提取成一个公共的函数,放到了fetch.js里面,使用的时候调用fetchData(api,{参数})即可获取数据 本文引言: 定一个订单类,订单类里有个方法就是获取最大最小id,然后我们把他封装好之后在具体的vue文件里取...
C#中 类的成员
C#中类的成员有 方法, 构造函数(析构函数),字段,属性;对初学者值得一提的是只有类和类成员才有访问修饰符;1,方法。方法又称函数 类中的方法和正常的方法差不多 只是前面有访问修饰符,用的时候用对象名点儿出来;静态的方法不用实例化,非静态的方法必须实例化,静态的方法在程序一旦启动不论是否new其所在类都会驻留内存,对系统的占用相对来说比非静态的方法占用大,但是由于其使用方便,调用快捷,还是很值得
python中定义类方法
和属性类似,方法也分实例方法和类方法。 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。 要在class中定义类方法,需要这么写: class Person(object): count = 0 @classmethod def how_many(cls): return cls.count def __init_
[Python]什么时候使用自定义类
Python中所有的数据都是对象,它提供了许多高级的内建数据类型,功能强大,使用方便,是Python的优点之一。那么什么时候使用自定义类呢?比如设计一个Person类,如果不使用自定义类,可以这样做: person=['mike', 23, 'male']  #0-姓名, 1-年纪, 2-性别 print(person[0], person[1], person[2])    
头文件中类的成员函数的声明和定义
原文:http://blog.csdn.net/dengm155/article/details/51692285 --------------------------------------------------------———————————————————————————————————————————— 先来做一个实验,你在一个头文件中定义一个类,然后把内中的一个函数的实现
Python 3.6 定义类中的方法和属性
#Python3 中类的封装,构造方法的定义,实例化属性,和共有属性 #把具有相同特征的一类东西抽象成一个类 #1,类的定义 关键字:Class #类和方法的命名都是驼峰命名规则,但是类的首字母大写,方法的首字母小写 class Animal(object): #这里定义了一个Animal类,继承了object基类 pass #注意,任何类都会继承object基类,所
Python——类的定义和超类
假定你已经学习了Java程序设计,那么就不难理解面向对象程序设计。在面向对象中,有几个非常重要的概念,包括:抽象、封装、继承、多态、方法重载等,不管怎样这些概念都与类相关。在Python中同样有同Java一样的类,用户可以根据设计需要对事物进行抽象,抽取主要的特征来构造需要的类并定义属于类的成员方法。 一、类的定义# _*_ coding:utf-8 _*_ __metaclass__=type
定义类的数组 及其使用
类: public class DFA_Obj { private int Begin; private char Condition; private int Result; public DFA_Obj(int Begin,char Condition,int Result){ this.Begin = Begin; thi
【c#】类的定义---各关键字的作用
关键字的作用 注意: internal、public也可以用来定义接口的访问性; abstract、sealed只能用来修饰类 第一:基本类的定义 internal class Person {     //我是一个Person类,默认类的修饰符是intenal,只能在当前程序集中访问 } 和上面案例一样的类定义如下,二者意思
c#中类和对象详解
1.1 类和对象类(class) 是最基础的 C# 类型。类是一个数据结构,将状态(字段)和操作(方法和其他函数成员)组合在一个单元中。类为动态创建的类实例(instance) 提供了定义,实例也称为对象(object)。类支持继承(inheritance) 和多态性(polymorphism),这是派生类(derived class) 可用来扩展和专用化基类(base class)的机制。使用类声明可以创建新的类。类声明以一个声明头开始,其组成方式如下:先指定类的属性和修饰符,然后是类的名称,接着是基类(
C#在类中定义数组并初始化
定义一个带有数组的类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class MyIntArray {     private int[] a;            public MyIntArray(int
C#中接口的理解
1.C#中对于接口的定义使用关键字interface 2.接口中的方法都没有方法体。必须在实现它的类中实现方法体 3.接口没有构造函数,也没有字段 4.接口及接口中的方法必须定义为public 5.接口名一般习惯上使用大写的I+自定义名命名 6.接口可以继承接口,如下面代码中的IB接口,继承了IA接口 using System; using System.Collect
Python中类的定义与使用
Python中类的定义与使用 Python中类的定义与使用  Part I 目标:   1.类的定义   2.父类,子类定义,以及子类调用父类   3.类的组合使用   4.内置功能   1.类的定义 代码如下: #!/usr/bin/env python #coding:utf8 class Hotel(object): """d
C#类中属性的定义
属性是用来描述类的特征;     类语法: [public]   class 类名 {                字段;                属性;                方法; } 类需要实例化后才能使用,但我们是通过属性来访问类中的字段;字段是是用来存储数据的; 属性的作用就是用来保护字段的,对字段的赋值和取值进行限定。它的本质就是两个方法,一个get(
关于Python中定义类时 self 的理解
一直在用A byte of Python这本书学Python,时间跨度托得有点久。 今天才刚接触到类(class)的概念,敲完了目前最长的一个例子,加空行加注释一共60行(见笑了)。 对于class,定义一个类名称,然后同样要缩进,定义类中的方法(methods),如同单独定义函数(function),唯一的不同点是: 第一个定义的 method 一般是 __inti__ (初始化),形式是
python3 类对象的定义、方法
类 Class 对象、定义、方法面向对象的定义类 Class: 用来描述具体相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。对象是类的示例。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量用于处理类及其实例对象的相关数据。方法重写:如果从父类继承的方法不能满足子类的需求,可以对其 进行改写
Python 使用type来定义类
我们先来看一张图仔细观察:    我们使用 class 定义了 Class类,然后实例化给 cls    观察cls的类型,它的类型指向 Class    那么Class的类型指向谁呢?指向type仔细思考,会不会Class是由type来定义的呢?是的,其实Class是由 type来声明。我们上代码测试一下。可以看到,type需要三个参数,你可以理解为:    第一个参数: 类名    第二个参数...
jquery自定义类和派生类写法一例
jquery自定义类和派生类写法一例
C++ 类内定义和类外定义
1.类内定义         类内定义的概念:成员函数的函数体(实现)是在类的内部完成的。这种实现方式c++隐式为内联函数。
python中定义类时__init__()方法的作用
最开始学习python,认为定义类时__init__方法的作用等同于C中的构造函数,但是使用之后发现也有区别例如:执行时的步骤可以理解为;b = object.__new__(a)a.__init__(a,&quot;wang&quot;)即__init__的作用是初始化实例后的对象b在子类不重写__init__方法时,子类会默认调用父类中的__init__方法子类也可以重写__init__方法,来给子类定义专属属性...
JS中定义类的方法
JS中定义类的方式有很多种: 1、工厂方式   function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){     document.write(this.color)    };    return ocar;   
Java 如何理解数组在Java中作为一个类?
Java数组的使用语法与C和C++的比较类似,但是它的本质是一个Java类,只是这个类比较特殊,所以很容易被人误解。    大家知道,Java的数据类型可以分为俩种:基本数据类型和引用数据类型。那么数组属于哪种呢?很显然,数组不会是基本数据类型,因为基本类型就只有那8中,那他应该就属于引用数据类型了,也就是说每一个数组实例都是一个对象,这些对象同属于一个类。 首先,看一看如何使用一个Java数
【HTML/JS】Javascript定义类(class)的三种方法
http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 作者: 阮一峰 日期: 2012年7月 9日 将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言。如果你忘了填写用户名,它就跳出一个警告。 如今,它变得几乎无所不能,
C#与MATLAB之间传递参数
MWNumericArray是MWArray和c#中数据的中间类,怎么用?怎样在C#与matlab间传递参数?
java 入门学习(五) 怎么定义类,定义方法
上一章讲了什么是类 和对象的概念,讲的不好,请大家原谅,水平有限有错误的地方希望大家给指出来,这章主要讲怎么定义类 定义方法 和类的构造函数   要定义一个类 可以使用Class 后面跟类的名字,然后再跟一对大括号 ,很好,定义一个类已经完成了。比如 上一节说的电视这个类  Class Tv{    String name=“我是李家的电视机” } 按照习惯,Java中的类名以一个大写
文章热词 统计学稳健估计opencv函数 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java中怎么命名班级类 区块链怎么理解