面向对象编程笔记--static

通过static方法,提供静态的不需要实例化即可访问的方法或属性。所有的调用者可以使用同一个类(不实例化)或对象(只实例化一次),可以应用的场景:

1)各个调用者共享数据,协同工作。

2)对象只可以实例化一次。

3)被调用对象的生命周期 与调用者无关。或者说,该对象有全局的生命周期,持续工作,提供给调用者的只是一个接口。

类的实例由类自己来维护,对外提供一个 取实例的一个方法。

典型代码:

public class TestClass
{
    //维护的实例
    private static TestClass instance;
    //对外提供的get实例的静态方法
    public static TestClass Instance
    {
        get
        {
            if (instance == null)
                instance = new TestClass();
            return instance;
        }
    }
}

应用举例:

WPF中关于DependencyProperty的定义

/*
*    两种使用方式
*        1)以总类的形式利用Dictionary,记录所有通过该类的静态注册方法注册的属性
*        2)生成新的对象
*
*/
public class DependencyProperty
{
    internal static Dictionary<object, DependencyProperty> RegisteredDps = new Dictionary<object, DependencyProperty>();
    internal string Name;
    internal object Value;
    internal object HashCode;
    //构造函数
    private DependencyProperty(string name, Type propertyName, Type ownerType, object defaultValue)
    {
        this.Name = name;
        this.Value = defaultValue;
        this.HashCode = name.GetHashCode() ^ ownerType.GetHashCode();
    }
    //注册函数
    public static DependencyProperty Register(string name, Type propertyType, Type ownerType, object defaultValue)
    {
        DependencyProperty dp = new DependencyProperty(name, propertyType, ownerType, defaultValue);
        RegisteredDps.Add(dp.HashCode, dp);
        return dp;
    }
}
时间: 2024-08-07 18:38:58

面向对象编程笔记--static的相关文章

php面向对象编程笔记static的后期静态绑定

最近在看laravel的源码,开始的时候static关键字的用法让我读完一头雾水, static不应该是用来定义静态变量方法和属性的么? 在方法中 static::setInstance($this); 是什么? 查了手册才明白,这是static关键字的另一种用法,"后期静态绑定",也可以称为"静态绑定" http://php.net/manual/zh/language.oop5.late-static-bindings.php 官方的介绍: 该功能从语言内部角度

JavaScript面向对象编程笔记

<!DOCTYPE html> <html> <head> <title>面向对象编程</title> <script type="text/javascript"> var person = {};//或者这样:var person = new Object(); person.name = "张三"; person.age = 20; //函数充当属性,属性变方法了! person.info

【python】python 面向对象编程笔记

1. 类的创建 类是一种数据结构,我们可以用它来定义对象,后者把数据值和行为特性融合在一起.类是现实世界的抽象的实体以编程形式出现.实例是这些对象的具体化. 类名通常由大写字母打头.这是标准惯例 class First(): pass if __name__ == '__main__': f = First() f.x = 3 f.y = 5 print(f.x + f.y ) 2. 方法 self 参数,它在所有的方法声明中都存在.这个参数代表实例对象本身,当你用实例调用方法时,由解释器悄悄地

面向对象编程(七)——Static关键字

Static变量 ◆在类中,用static声明的成员变量为静态变量,或者叫:类属性.类变量. (注意:静态变量是从属于类,在对象里面是没有这个属性的:成员变量是从属于对象的,有了对象才有那个属性) 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显示初始化. 对于该类所有对象来说,static成员变量只有一份.被该类的所有对象共享!! 可以使用“对象.类属性”来调用.不过,一般都是用"类名.类属性”. static变量置于方法区中. 在静态的方法里面不可以调用非静态的方法或变量:

js面向对象编程笔记

1. 基础 面向对象实例 function Lecture(name, teacher) { this.name = name; this.teacher = teacher; } Lecture.prototype.display = function () { return this.teacher + ' is teaching ' + this.name; } //var le = new Lecture('数学', '李四'); //console.log(le.display());

PHP面向对象编程 对象的基本概念

再次梳理一下面向对象编程的要点. 此文是以php为例,但思想是通用的. 总结的PHP面向对象编程笔记 对象的基本概念 对象的基本构成 对象包含两部分 一.对象的组成元素 是对象的数据模型,用于描述对象的数据. 又被称为对象的属性,或对象的成员变量. 二.对象的行为 是对象的行为模型,用于描述对象能够做什么. 又被称为对象的方法. 对象的特点 1 每个对象都是独一无二的 2 对象是一个特定事物,他的职能是完成特定功能 3 对象是可以重复利用的 面向对象的基本概念 面向对象就是在编程的时候数据结构形

面向对象编程(十二)——final关键字

阅读目录 final关键字final修饰变量final修饰方法final修饰类Final && Static 总结 final关键字 Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量. 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量). 回到顶部 final修饰变量 final修饰变量:该变量变成常量 对于一个final变量,如果是基本数据类型的变量,则其数值

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函

C++ Primer 学习笔记_65_面向对象编程 --概述、定义基类和派生类

面向对象编程 --概述.定义基类和派生类 引言: 面向对象编程基于的三个基本概念:数据抽象.继承和动态绑定. 在C++中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员.动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数. 继承和动态绑定在两个方面简化了我们的程序:[继承]能够容易地定义与其他类相似但又不相同的新类,[派生]能够更容易地编写忽略这些相似类型之间区别的程序. 面向对象编程:概述 面向对象编程的关键思想是多态性(polymorphism)