net类型初始化-关于静态变量初始化为当前类型的对象问题

问题描述

关于静态变量初始化为当前类型的对象问题

public class test
{
int c = 0;
public static test my = new test(2);
public int X;
public test(int x)
{
X = x;
}
}
class Program
{
static void Main(string[] args)
{
test me = test.my;
Console.WriteLine(me.X.ToString () );
Console.ReadKey();
}
}

 在内存中,静态变量什么时候调用的构造方法啊?为什么自己能调用自己?

解决方案

my不是静态变量,它只是在类内部实例化的一个对象
类有三种构造函数
1.静态构造函数 static test() 这类构造函数只能对类的静态变量进行初始化
2.实例构造函数 public test() 只要有实例化过程,就会调用这个构造函数
3.静态构造函数 private test() 一般用于只包含私有成员的类的初始化

解决方案二:

在第一次调用 test.my 的时候初始化。
什么叫做“自己能调用自己”?test(2) 是构造函数好吗。

解决方案三:

public static test my = new test(2);
其实这段代码是放在test的静态构造函数中执行。
静态构造函数和实例构造函数不矛盾。
比如说,一些水平很烂的老师经常会指导学生写如下的程序
class Program
{
int add(int a, int b)
{
return a + b;
}
public static void main()
{
Program p = new Program();
p.add(1, 2);
}
}
这完全可以。为什么说老师很烂,因为这种场合应该把add也定义成static变量才是正确的做法。

解决方案四:

static的东西在类加载时,就分配了内存空间,即编译时就为这些成员变量的实例分配了空间。

解决方案五:

C++的妈妈是C,故不论怎么变都会生成C代码,有些事情是编译器帮你做了,

解决方案六:

类中的静态变量是在编译的时候就分配了内存的,而且不管你的实例对象有多少它都只有1份

时间: 2025-01-27 20:37:51

net类型初始化-关于静态变量初始化为当前类型的对象问题的相关文章

Java中static静态变量的初始化完全解析_java

静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: public class Test { public static Test1 t = new Test1(); public static int a = 0; public static int b; public static void main(String[] arg) { System.out.println(Test.a); System.out.println(Test.b); } } class Test1

Javascript核心读书有感之类型、值和变量

计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特性就是主持多种数据类型.当程序需要将值保持起来以备将来使用时,便将其赋值给(将值"保存"到)一个变量(variable).变量是一个值的符号名称,可以通过名称获得对值的引用.变量的工作机制是编程语言的令一个基本特性.本章将参照上节帮助理解本章内容,后续将更深入的讲解. javascript

Javascript核心读书有感之类型、值和变量_基础知识

计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特性就是主持多种数据类型.当程序需要将值保持起来以备将来使用时,便将其赋值给(将值"保存"到)一个变量(variable).变量是一个值的符号名称,可以通过名称获得对值的引用.变量的工作机制是编程语言的令一个基本特性.本章将参照上节帮助理解本章内容,后续将更深入的讲解. javascript

C/C++中全局变量和静态变量的区别

1. 全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量. 2. 全局变量.静态全局变量.静态局部变量都是在静态存储区(全局数据区)中分配空间的,而局部变量是在栈上分配空间的. 3. 全局变量.静态变量的生命期和程序生命期是一样的,在程序结束之后操作系统会回收空间. 4. 全局变量和静态变量都是保存在静态存储区中,生命期和程序一样,但是不同的是全局变量的作用域是整个项目,而静态全局变量是当前程序

php中static 静态变量和普通变量的区别

在变量的前面加上static 就构成了静态变量(static 变量). static变量和普通变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误. static变量和普通变量的区别: static全局变量与普通

类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

 常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式. 案例: #include <iostream> class fushu { public: //通过加explicit的这种方式避免隐式转换,避免引发歧义 explicit fushu(int num) { x = num; y = num; } void print() { std::cou

php中的静态变量的基本用法

 静态变量只存在于函数作用域内,静态变量只存活在栈中,下次再调用这个函数的时候,该变量的值会保留下来 静态变量只存在于函数作用域内,静态变量只存活在栈中.一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会.下次再调用这个函数的时候,该变量的值会保留下来.    静态的变量的基本用法    1. 在类中定义静态变量  [访问修饰符] static $变量名;  2. 如何访问静态变量  如果在类中访问 有两种方法 self::$静态变量名 , 类名::$静态变量名  如果在类外访

静态变量、静态函数 与 普通变量 普通函数的区别

关于这个问题不得不涉及到 堆 和 栈的区别 1. 内存分配 一个有c/c++编译的程序占用的内存分为以下几个部分 (1). 栈区(stack)--------由编译器自动分配释放, 存放函数的参数,局部变量的值等.其操作方式类似于数据结构中的栈. (2).堆区(heap)---------一般由程序员分配.释放.若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.   (3).全局区(静态区)(static)-----------全局变量和静态变量

C# 静态变量与静态方法实例研究_C#教程

程序如下: 复制代码 代码如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典 = Settings.Default.辞典所在目录+"haou_dict.xml"; try { if (File.Exists(英汉辞典)) { XDocument dictionary = XDocument.Load(英汉辞典); var query = from p in dictionary.Descendants