在同一个c#或c++类中可以有静态方法和实例方法吗?
can you have static and instance methods in the same c# or c++ class ?
可以在同一个c#或c++类中使用静态方法和实例方法吗?
如果是,那两者都有什么用,如果不是,为什么不呢?
当然可以!
静态方法不传递隐式的this
指针,并且在不需要对该类/类型的特定实例进行操作(例如修改其成员)时使用。
如果确实需要修改一个特定的实例,你应该使用实例方法。
这两种类型的方法没有理由不能在同一个类中一起声明。如果您正在使用c#,请查看。net框架定义的一些类。它们中的许多都有静态和实例方法。这将给你一些关于如何有效使用这些的想法。
在c++中,甚至没有理由创建一个"静态"类(具有所有静态方法的类),就像你在c#中发现的那样。更好的方法是将函数作为自由函数放在名称空间中。不是所有东西都必须是"对象"
你可以。
有很多用途。静态方法通常是库工具,可以应用于类的实例。
实例方法是由每个特定实例调用的方法。
是的,这里有一个来自框架本身的实际示例:
namespace System
{
public struct Int32 //...
{
public const int MaxValue = 2147483647;
//...
public TypeCode GetTypeCode();
public static int Parse(string s);
//...
}
}
只有那些需要在同一原始类的每个对象中平等地共享的成员保持静态,例如,如果你有一个静态方法(静态方法也需要返回类的静态值),静态成员甚至在你创建该类的对象之前被初始化。
现在你也问了为什么和为什么不,记住,如果你开始以面向对象的方式思考,有一千种方法和一千种理由。
相关文章:
- 模板中的模板方法 - 实例声明和类方法声明签名不同
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 使用包含互斥锁的类的方法实例化 cpp11 线程
- 所有类实例方法的打印语句最后都在打印吗?
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 当对象为值时访问实例方法<map>
- C - 初始化静态成员的方法
- CPU寄存器中返回的用户定义类型的C 对象.实例方法如何工作
- 在WINDBG中调用C 方法实例并打印结果
- LNK2001带有静态属性和方法的错误(QT,C )
- 是否可以在实例方法中使用带有"this"的重载运算符?
- 在不指定实例化的情况下调用类模板的静态方法的方法
- 静态内联方法无需静态成员初始化
- 为什么可以从实例化基类对象的投射指针调用非静态派生类方法
- 如何使用带有实例方法的C++11线程
- 调用静态单一实例以调用另一个方法的方法
- 将 boost::function 与实例方法一起使用
- GSL 中的静态虚拟解决方法
- 在 Visual Studio 2008 C++ Express 中评估实例方法
- 在同一个c#或c++类中可以有静态方法和实例方法吗?