- 浏览: 281785 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
weituotian:
这篇文章真的很好阿
C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 -
clshuai:
博主,你好,看了你的这篇文章,让我很敬佩。可谓内容之全,涵盖范 ...
C#操作Excel -
devilhand:
DataGridView刷新数据的问题 -
devilhand:
DataGridView刷新数据的问题 -
devilhand:
DataGridView刷新数据的问题
(1)不带参数的构造函数称为“默认构造函数”。无论何时,只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。
(2)派生类可以显示调用基类的构造函数。用户不能显示调用构造函数
(3)先执行基类的构造函数,再执行派生类的构造函数。
(4)在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话)。
(5)如果在基类中有自己写的构造函数,系统就不会调用基类默认的构造函数,若在派生类中没有显式的指定基类的构造函数,此时就会出错,需要在基类中,添加基类默认的构造函数。
可以得到的结论是 先调用父类的构造函数进行初始化,再调用继承类的构造函数,如果没有在继承类中指明父类的构造函数,则默认调用父类中没有参数的构造函数,然后调用继承类的构造函数
(6)构造函数可以使用 this 关键字调用同一对象中的另一构造函数
/*********************************************************************** * 调用默认的构造函数 ************************************************************************/ using System; class A { public A() { }//可省略,系统会自动添加 } class C { static void Main(string[] args) { //此时,系统自动调用A(),初始化A的变量 A a = new A(); } }
(2)派生类可以显示调用基类的构造函数。用户不能显示调用构造函数
/*********************************************************************** * 派生类可以显示调用基类的构造函数。用户不能显示调用构造函数 ************************************************************************/ using System; class A { public A() { } } class B:A { public B():base (){}//显示调用基类的构造函数 } class C { static void Main(string[] args) { A a = new A(); //错误,用户不能显示调用构造函数。构造函数是由系统根据实例化时的参数自动调用的。 a.A(); } }
(3)先执行基类的构造函数,再执行派生类的构造函数。
/*********************************************************************** * 实例化时先执行基类A的构造函数,再行B类的构造函数 ************************************************************************/ using System; class A { public A() { Console.WriteLine("这是A的构造函数"); } } class B:A { public B() { Console.WriteLine("这是B的构造函数"); } } class C { static void Main(string[] args) { B b = new B (); } }
(4)在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数(如果有的话)。
/*********************************************************************** * 在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用默认构造函数。 ************************************************************************/ using System; class A { public A() { Console.WriteLine("这是A的构造函数"); } public A(int i) { Console.WriteLine("这是A的有参构造函数"); } } class B:A { public B() { Console.WriteLine("这是B的构造函数"); } } class C { static void Main(string[] args) { //派生类B中,没有指定基类A的构造函数。此时先调用A的默认构造函数,再调用B的构造函数 B b = new B (); } }
(5)如果在基类中有自己写的构造函数,系统就不会调用基类默认的构造函数,若在派生类中没有显式的指定基类的构造函数,此时就会出错,需要在基类中,添加基类默认的构造函数。
/*********************************************************************** * 基类A中有自己写的有参构造函数(系统不再提供默认的构造函数), * 派生类B中没有指定A的构造函数,此时系统会寻找基类A的默认构造函数,因此会 * 出错。(提示:A中不包含0个参数的构造函数) * ************************************************************************/ using System; class A { public A(int i) { Console.WriteLine("这是A的有参构造函数"); } } class B:A { public B() { Console.WriteLine("这是B的构造函数"); } } class C { static void Main(string[] args) { //出错,A中不包含0个参数的构造函数 B b = new B (); } }
/*********************************************************************** * 派生类B中指定了基类A的构造函数,不会出错 ************************************************************************/ using System; class A { public A(int i) { Console.WriteLine("这是A的有参构造函数"); } } class B:A { public B() :base(1) { Console.WriteLine("这是B的构造函数"); } } class C { static void Main(string[] args) { //派生类B中指定了基类A的构造函数,不会出错 B b = new B (); } }
/*********************************************************************** * 派生类中不指定基类的构造函数而为基类添加默认的构造函数,不会出错 ************************************************************************/ using System; class A { public A() { Console.WriteLine("这是A的构造函数"); } public A(int i) { Console.WriteLine("这是A的有参构造函数"); } } class B:A { public B() { Console.WriteLine("这是B的构造函数"); } } class C { static void Main(string[] args) { //派生类B中指定了基类A的构造函数,但为基类添加默认的构造函数,不会出错 B b = new B (); } }
可以得到的结论是 先调用父类的构造函数进行初始化,再调用继承类的构造函数,如果没有在继承类中指明父类的构造函数,则默认调用父类中没有参数的构造函数,然后调用继承类的构造函数
(6)构造函数可以使用 this 关键字调用同一对象中的另一构造函数
/*********************************************************************** * 使用this可以调用同一类中另一个构造函数 ************************************************************************/ using System; class A { public A():this("abc") { Console.WriteLine("这是A无参数的构造函数"); } public A(string s) { Console.WriteLine("这是A有一个参数的构造函数"); } } class B:A { public B() { Console.WriteLine("这是B的构造函数"); } } class C { static void Main(string[] args) { //先执行A中有一个参数的构造函数,再执行A中无参数的构造函数,最后执行B的构造函数 B b = new B (); } }
发表评论
-
C#获取本地IP
2012-06-06 14:39 935/// <summary> ... -
只能启动单个程序
2012-05-04 12:51 806bool ret; System. ... -
.Net控件命名规范
2012-04-25 14:45 803<!--------------A----------- ... -
DataGridView绑定数据时,时间格式显示不全的问题
2012-04-25 13:54 1027DataGridView绑定数据时,时间格式显示问题 今天做 ... -
把Dgv的颜色改回默认颜色
2012-04-25 13:35 952dgv.Rows[i].DefaultCellStyle.Ba ... -
Winform 去掉 最大化 最小化 关闭按钮 保留左侧图片
2012-04-23 17:02 1184using System; using System.Col ... -
禁用窗体的关闭按钮
2012-04-23 16:58 872[DllImport("USER32 ... -
c#中用声音提示报警
2012-03-14 09:51 1761using System; using System.Ru ... -
WinForm 查看控制台输出
2012-02-15 10:39 1303/// <summary> ... -
C# 启动外部程序的几种方法
2011-10-17 19:15 7471. 启动外部程序,不等待其退出。2. 启动外部程序,等待其退 ... -
解决VS2005不能调试线程问题
2011-08-12 12:33 2396昨天突然VS2005不能调试线程,网上找了很多方法都不行,后来 ... -
通过域名获取IP的两种方法
2011-07-16 15:09 1848//每次都去Dns服务器上 ... -
执行命名行命令
2011-07-16 14:41 704/// <summary> / ... -
获取指定目录下所有文件
2011-07-01 20:48 1475命名空间 using System.Collections; ... -
C#控制Excel的打印格式
2011-06-22 20:54 3722Excel.Application appExcel=n ... -
C#操作Excel
2011-06-22 14:28 1617using System; using System. ... -
C# 操作Excel的类
2011-06-22 14:20 1362using System; using Micro ... -
DataGridView刷新数据的问题
2011-06-21 11:39 42291、操作:UI线程修改数据后重新绑定dgv,一个后台线程定时刷 ... -
VS2005水晶报表注册码
2011-06-18 13:40 7216707437608 -
按Enter键时,焦点移到下一个控件
2011-06-18 10:06 1237#region 按Enter键时,焦点移 ...
相关推荐
4. **静态构造函数**:静态构造函数在类的首次使用之前由.NET运行库自动调用,且仅执行一次。它不接受参数,没有访问修饰符,只能访问类的静态成员。静态构造函数用于初始化静态字段和属性,尤其是当这些字段需要从...
这意味着在`const`成员函数中不能修改任何非静态数据成员,也不能调用其他非`const`成员函数。使用`const`成员函数可以增加代码的安全性和可读性。 ### 构造函数与析构函数 构造函数是类的一个特殊成员函数,用于...
- 静态变量存储在方法区,而非静态变量存储在堆内存中。 - 静态方法只能访问静态成员,不能使用this或super关键字,因为它们与对象关联。 5. **main函数**: - JVM通过静态主方法(`public static void main...
1. **构造函数**:构造函数是用于初始化新创建对象的特殊方法,它的名称与类名相同,没有返回值。当创建一个对象时,系统会自动调用构造函数来设置对象的状态。可以定义多个构造函数以满足不同初始化需求,这被称为...
这篇笔记将聚焦于Java中的多态性,这是面向对象编程的关键概念,同时也涉及到构造函数、静态方法和final关键字的理解。 1. **Java中的多态性**: 多态性在Java中表现为一个对象可以有多种形态,即同一种类型的不同...
- 如果类已经定义了至少一个构造函数(无论是否带有参数),编译器不会生成默认构造函数。 - 示例: ```java class Bush { Bush(int i) {} } // 下面这行代码会报错,因为没有默认构造函数 new Bush(); ```...
这个构造函数负责初始化类中的所有非静态成员变量,并执行一些基本的初始化任务。如果类中有需要特别初始化的成员,则应显式定义构造函数。 总的来说,《Inside the C++ Object Model》这本书不仅是一本关于C++底层...
- **默认构造函数的作用**:默认构造函数在多种情况下会被自动调用,例如在未初始化的非静态局部变量、类中合成的默认构造函数成员等场合。此外,当没有提供完整的数组初始化时,默认构造函数也会被调用。 - **隐式...
- **静态构造函数**:在类的任何实例被创建前被调用,且仅被调用一次。 - **析构函数**:通常不推荐使用,因为现代.NET环境有更好的资源管理方式。 15. **装配**:C#程序由一个或多个装配组成,分为应用程序装配...
这篇笔记涵盖了多个关键知识点,包括多态性、final方法、静态方法、构造函数以及构造过程中的多态行为。 首先,Java中的多态性是面向对象编程的核心特性之一。与C++不同,Java中几乎所有的非static和非final方法都...
- 静态方法中只能访问静态成员,不能访问非静态成员。 4. **使用静态的场景**: - 当某个属性在所有对象中都是相同的值时,可以将其声明为静态。 - 静态方法适合处理不需要依赖对象状态的逻辑。 以上是Java面向...
- 示例代码中尝试在构造函数内部初始化非`static`的`const`成员变量是不正确的做法,因为`const`成员变量必须在构造函数的初始化列表中初始化。 **析构函数的特性** - 析构函数可以声明为`inline`,这样可以提高...
它们不能访问非静态成员,因为它们在没有具体对象的情况下被调用。 6. **静态代码块**: 静态代码块用于初始化静态变量。一旦类被加载,这些代码就会执行。 7. **继承**: Java支持单一继承,一个子类只能继承一个...
1. 静态成员变量和非静态成员变量的区别:静态成员变量在程序运行中只会维护一份,而非静态成员变量每创建一个类就会维护一份。 2. String 类型的 API:字符串内容不能发生变化,一旦字符串内容发生变化,都要返回新...
而非静态方法(如`F`)可以访问非静态成员,因为它们有明确的实例上下文。 **D. `this` 保留字** `this`关键字在C#中表示当前对象实例的引用。在构造函数、方法和其他成员中,`this`用于引用调用该成员的实例。 **...
笔记中提到了`Pen`类,通过构造函数对私有成员变量进行初始化。例如,`Pen(int size)`构造函数接收一个参数并初始化`m_size`成员。这里强调了构造函数的重要性,即在对象创建时为其成员变量赋予初始值,确保对象...
- 类可以有默认构造函数,但结构即使定义了构造函数,仍保留默认构造函数。 11. **可变参数**: - 使用 `params` 关键字,方法可以接受任意数量的相同类型的参数,例如 `public void AnyNumberOfArgument(params ...
- 对象创建时的初始化顺序为:默认初始化 -> 构造函数中的初始化 -> 显式调用方法或通过对象名赋值。 #### 五、关键字this - **含义**: `this` 是一个特殊的关键字,它代表当前对象的一个引用。 - **用途**: - ...