热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#中实例化后,对象如何重新调用其构造函数以实现特定功能

在C#中,一旦对象被实例化后,直接重新调用构造函数是不可行的。与C++不同,C#不支持在对象实例化后强制调用构造函数。为了实现类似的功能,可以通过定义一个重置方法或使用工厂模式来重新初始化对象的状态。例如,可以创建一个`Reset`方法,在该方法中重新设置对象的属性和状态,从而达到类似于重新调用构造函数的效果。这样不仅保持了代码的清晰性和可维护性,还避免了潜在的副作用。
之前用C++,可以在一个类已经实例化之后,再去强行调用自身的构造函数的.

class TestCls
{
public:
TestCls(){
cout<<"TestCls Ctor"< }
};

int main(int argc, char* argv[])
{
TestCls tc;//实例化
tc.TestCls::TestCls();//实例化后再执行构造函数


在C#里面,不知道对应的功能要怎么写?刚刚新学,希望朋友们教一下,谢谢

16 个解决方案

#1


TestCls tc;//实例化
    tc.TestCls::TestCls();//实例化后再执行构造函数

 
C#
TestCls tc = new TestCls();
tc.TestCls();

#2


调用构造函数:自己类调用自己的本来的构造函数



Student extends Person{ 
private String school; 

Student(String name, String location, String school) { 
super(name, location); 
this.school = school; 


Student(String name, String school) { 
this(name, "beijing", school);  


public String info { 
 super.info + "school" + school; 


#3


1楼的代码试过不行.报错是
Error 1
'TestCls' does not contain a definition for 'TestCls' and no extension method 'TestCls' accepting a first argument of type 'TestCls' could be found (are you missing a using directive or an assembly reference?)
我其实是自己先试过像1楼那样写,不行,再上来问的.

先谢谢2楼的代码,不过我是想在类的外面,实例化之后,某实例再显式地调用自己的构造函数.

#4


好可怜,没人回答我.

#5


在外部用实例调自己的构造?这个只能变通一下做到吧。
class TestCls
{
public TestCls(){Construct();}
public void Construct(){...}
}

TestCls tc = new TestCls();
tc.Construct();

#6


不太明白,为什么都实例化之后了还要再次调用构造函数,如果是要实现什么功能的话,
在类中加个函数不就可以了吗~

#7


谢谢5楼的回复.
6楼说得对,实例化之后没必要去调用构造函数.
就算是C++里,也极少会出现这样的调用.

我只是好奇,想知道在C#里面,有没有可能说实例化之后,在外部再去执行构造函数的.

#8


~~>_<~~ 自己顶自己

#9


构造函数在定义类对象时由系统自动调用,而不允许像其它成员函数那样由用户直接调用。
我认为是不可以的  只能变通下  

#10


搅糊涂了,看来技术不够!

#11


完全违反为自然界规律,有见过别人生出来之后在生自己出来的吗!除非是克隆人!

#12


楼上妙喻

#13


楼上妙喻,但调用构造函数不能等同于对象出生.
可不可以认为 对象的出生 是系统为其分配了内存.构造函数只是初始化一下成员变量.并不实现分配内存的动作.
那为什么不能再次调用构造函数?是C#不允许这样做,还是.NET Framework 不允许这样做?

#14


C#没有这种语法。
构造函数就是分配内存。
你可以变通实现

#15


自己写一个构造函数,什么也没有,怎么分配内存?
是系统给我们分配了内存,再调用我们的构造函数来初始化成员,还是怎样的?

#16


可以定义多个不同签同的构造函数

推荐阅读
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
author-avatar
Openset
Less is more!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有