静态函数

C#常量

江枫思渺然 提交于 2020-02-05 05:08:42
常量就是其值固定不变的量,值类型或引用类型都可以作为常量。在C#中,常量可以分为静态常量和动态常量。 一、静态常量 声明静态常量的语法格式如下: 修饰符 const 数据类型 常量名 = 常量值;?修饰符:可以是public、protected、internal、private等。 ?const:声明静态常量的关键字。 ?数据类型:可以是整型(int)、浮点型(double)、枚举或字符串。 如: public const int a = 1000; 静态常量在编译时会将其替换为所对应的值。用const定义的常量,对于所有类的对象而言都是一样的,因此需要像访问静态成员那样去访问const定义的常量。 也可以使用一条语句同时声明多个常量,比如: class classTest { public const double X = 1.0; public const double Y = 2.0; public const double Z = 3.0; } 可以写成: class classTest2 { public const double X = 1.0, Y = 2.0, Z = 3.0; } 在classTest2中声明的多个常量都写在一条语句中。 二、动态常量 声明动态常量的例子如下: public static readonly classTest classTest1

从C#到Python —— 4 类及面向对象

▼魔方 西西 提交于 2020-02-04 13:18:08
如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented)应该不会陌生。Python与C#一样,能够很好地支持面向对象的编程模式。本章对Python中面向对象编程的基本知识进行介绍,并将其与C#中的对应部分进行比较。 4.1 类的定义与实例化 4.1.1 类的定义 与C#一样,Python使用class关键字定义一个类。一个最简单的类定义语句如下: 1 class A:2 pass 它等价于C#中的 class A{}。当然,以上语句没有任何实际意义,它只是告诉我们什么是定义一个类所必需的,即:class关键字,类名和冒号,pass关键字只用来占位,相当于C#中花括号的作用。 4.1.2 类的实例化 类是定义对象格式的模板,而对象则是类的实例,通过类创建对象的过程称为类的实例化。在C#中,需要使用new关键字实例化一个类,例如 A a = new A(); 在上条语句中,C#完成了两件事情:首先声明一个类型为A的变量a,然后用new运算符创建一个类型为A的对象,并将该对象的引用赋值给变量a。而在Python中没有new关键字,同时它是一种动态语言,不需要事先指定变量的类型,只需要: a = A() 即可创建一个类型为A的对象,看起来好像是将类当作一个函数调用,返回值是新创建的对象。 4.2 类的成员变量 4.2.1 为类添加数据

Java基本概念

梦想的初衷 提交于 2020-02-04 05:44:05
问题及答案来源自《Java程序员面试笔试宝典》第四章 Java基础知识 4.1基本概念 1、J ava语言有何优势? 纯面向对象的语言 具有平台无关性,可移植性好 提供了很多内置的类库 提供了对web应用开发的支持 具有很好的安全性和健壮性 除去了C++中难以理解和容易混淆的特性(头文件、指针、多重继承等) 2、Java与C/C++有何区别? Java和C++的相同点: Java和C++都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等) 由于面向对象有许多非常好的特性(继承、组合等),因此二者都有很好的重用性 Java和C++的不同点: Java为解释性语言,而C/C++为编译型语言(Java执行速度比C/C++慢,但Java能跨平台执行而C/C++不能) Java代码运行过程:源代码通过Java编译器编译成字节码(.class),然后由JVM解释执行 C/C++代码运行过程:源代码通过编译和链接后生成可执行的二进制代码 Java为纯面向对象语言,所有代码要在类中实现,而C++兼具面向过程和面向对象编程的特点 Java没有C/C++中的指针 Java没有C++中的多重继承,但是Java引入了接口的概念,可以通过实现多个接口来实现与C++中多重继承一样的目的 在C++中需要开发人员管理内存分配(申请和释放),而Java中提供了垃圾回收器来实现垃圾的自动回收 C+

Java 静态代理和动态代理

最后都变了- 提交于 2020-02-02 10:07:29
Java 静态代理 静态代理通常用于对原有业务逻辑的扩充。比如持有二方包的某个类,并调用了其中的某些方法。然后出于某种原因,比如记录日志、打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里。所以可以创建一个代理类实现和二方方法相同的方法,通过让代理类持有真实对象,然后在原代码中调用代理类方法,来达到添加我们需要业务逻辑的目的。 这其实也就是代理模式的一种实现,通过对真实对象的封装,来实现扩展性。 一个典型的代理模式通常有三个角色,这里称之为**代理三要素** 共同接口 public interface Action { public void doSomething ( ); } 真实对象 public class RealObject implements Action{ public void doSomething () { System.out.println( "do something"); } } 代理对象 public class Proxy implements Action { private Action realObject; public Proxy (Action realObject) { this.realObject = realObject; } public void doSomething () { System.out.println

【设计模式】单例模式

喜夏-厌秋 提交于 2020-01-30 19:32:39
单例模式 单例模式: 保证一个类仅有一个实例,并提供一个全局访问点。 将构造函数放到private里,并提供全局访问点(static静态函数,返回类内部唯一构造实例) 为什么用静态函数,静态成员变量? 调用类里的函数需要先构造对象,有对象才能调用类内成员方法。但这个方法肯定不适合单例模式。 而另一种方法就是静态函数,可以使用类名直接调用。而静态函数只能调用静态成员方法。 上述代码属于 懒汉模式 :在第一次用到类实例的时候才会去实例化,访问量较小时, 采用懒汉式,以时间换空间。 分析: 最内层的判断,保证单线程肯定智能创建一个对象。 外面的锁,保证创建的过程是原子操作。 在外面的判断,保证只有第一次回加锁,后面就会重复加锁,再判断。 还有一个 饿汉式: 在单例类定义的时候就进行实例化。访问量较大、线程较多时, 采用饿汉式,以空间换时间。 线程安全,因为一开始就实例化了。 来源: https://www.cnblogs.com/LampsAsarum/p/12243514.html

c语言静态局部变量

北城余情 提交于 2020-01-30 12:33:50
使用实例 static int n = 10 ; 一般在函数中使用 如 void fn_static ( void ) { static int n = 10 ; printf ( "static n=%d\n" , n ) ; n ++ ; printf ( "n++=%d\n" , n ) ; } 第一次使用函数时输出10,11 第二次使用函数时输出11,12 因为代码static int n = 10 ;只会在第一次跑时赋值,并且这里面的n在函数跑完以后会保存,下一次n就等于n+1 可以做到保存一个函数里的变量 来源: https://www.cnblogs.com/zhjc/p/12242356.html

Lazyload 延迟加载效果

时光总嘲笑我的痴心妄想 提交于 2020-01-29 17:22:53
Lazyload是通过延迟加载来实现按需加载,达到节省资源,加快浏览速度的目的。 网上也有不少类似的效果,这个Lazyload主要特点是: 支持使用window(窗口)或元素作为容器对象; 对静态(位置大小不变)元素做了大量的优化; 支持垂直、水平或同时两个方向的延迟。 由于内容比较多,下一篇再介绍 图片延迟加载效果 。 兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0 效果预览 //--> */ /*--> */ 模式: 垂直正交方向 水平正交方向 垂直方向 水平方向 动态加载 阈值: //--> */ /*--> */ 利用textarea加载数据: <strong><a href="http://www.cnblogs.com/cloudgamer/archive/2008/07/06/SlideTrans.html">图片滑动切换效果</a></strong> <strong><a href="http://www.cnblogs.com/cloudgamer/archive/2008/07/21/ImgCropper.html">图片切割效果</a></strong> <strong><a href="http://www.cnblogs.com/cloudgamer/archive/2008

C++虚函数 - 静态函数能否为虚函数

我的梦境 提交于 2020-01-29 05:27:56
1.virtual与静态函数 C++中,静态成员函数不能被声明为virtual函数。 例如,下面的程序会编译失败。 class Test { public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { } }; 同样地,静态成员函数也不能被声明为const和volatile. 下面的程序也会编译失败。 class Test { public: // 编译错误: static成员函数不能为const static void fun() const { } // 如果声明为下面这样,是可以的。 const static void fun() {} 或类似于 const static int fun() { return 0; } }; 2.为何static成员函数不能为virtual static成员不属于任何类对象或类实例,所以即使给此函数加上virutal也是没有任何意义的。 静态与非静态成员函数之间有一个主要的区别。那就是静态成员函数没有this指针。 虚函数依靠vptr和vtable来处理。vptr是一个指针,在类的构造函数中创建生成,并且只能用this指针来访问它,因为它是类的一个成员,并且vptr指向保存虚函数地址的vtable. 对于静态成员函数,它没有this指针,所以无法访问vptr.

Python静态方法和类方法

醉酒当歌 提交于 2020-01-29 00:16:43
静态方法和类方法 静态方法 声明:使用装饰器@staticmethod 调用:类.静态方法() 特点:没有默认的参数 使用规则:实现函数的功能不需要对象,静态方法声明的函数属于当前类,但是不属于该类创建的对象。 例如声明一个计算三角形面积的类,但是在计算三角形面积之前需要判断三条边是否能够构建成一个三角形,在判断之前没有用到该类的属性,那就可以使用静态方法 from mant import sqrt class Triangle : def __init__ ( self , a , b , c ) : self . a = a self . b = b self . c = c @ staticmethod def valid ( a , b , c ) : return a + b > c and a + c > b and b + c > a def perimeter ( self ) : return self . a + self . b + self . c def area ( self ) : half = self . perimeter ( ) / 2 return sqrt ( half * ( half - self . a ) * ( half - self . b ) * ( half - self . c ) ) def main ( ) : a ,

Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等

无人久伴 提交于 2020-01-28 17:01:22
目录 静态 静态属性@property 类方法@classmethod 静态方法@staticmethod 组合 继承与派生 继承与派生 继承顺序 在子类中调用父类方法与super 多态 封装 反射 模块的动态导入 内置的attr方法 带双下户线的attr方法__setattr__、__getattr__、__delattr__ __getattr__方法的牛逼用法 继承方式完成包装 静态 静态属性@property 以类Room为例,Room类里面存储了width、length、height属性,面积、体积都是通过这些属性计算出来的,没有必要再存一份面积、体积。使用装饰器@property可以把有返回值的方法变成属性一样,这样减少了冗余,对调用者来说就像直接访问属性一样方便。这就是静态属性。 class Room: def __init__(self, name, owner, width, length, height): self.name = name self.owner = owner self.width = width self.length = length self.height = height pass @property def area(self): """ 计算面积 :return: 面积 """ return self.width * self