c#中的方法不需要C++那样首先声明吗

我以前学过一段时间C#,现在正在学习C++,
C++中说,函数(C#中的方法)在定义之前,需要声明。

我以前使用C#中,从来都没有进行过方法(C++中的函数)的声明啊。
我想问:
是否真的C#中无法也不需要对方法进行声明
谢谢大家,终于明白了,说真的,我理解了声明的意义后,真觉得声明这个东西实在很累赘,C#不愧是C++的进化产物,虽然好似就一点代码而已,但是省略了声明真的大大提高了编程效率。
要不是我为了使用C++中的dllmain函数,我是不会反回来学习C++的。要是C#中也有类似DLLMAIN函数这样的实现,我就彻底的放弃C++

这其实是面向过程与面向对象的区别。我简单将下我的理解
那么首先讲讲面向过程的程序结构,用C++语言将吧,
C++语言也支持面向对象的编程,在这里就用它面向过程的特性吧。
C++代码:

#include "stdafx.h"
#include <iostream>

using namespace std;

int Add(int num);//在这里需要声明一下

int _tmain(int argc, _TCHAR* argv[])
{
int i=Add(2);
cout<<i;
getchar();
return 0;
}
//其实这个是实现函数,可以与声明合起来,也就是说函数的实现其实也就是包含函数的声明。

int Add(int num)
{
return num+1;
}
也就是说声明和定义其实是可以合一起的,只不过,函数在使用前一定要声明一下,换句话说函数在被调用之前,一定要出现一次,得让人知道它是长什么样子的。

C#是完全面向对象的语言,什么东西都是类。在这里没有函数,或者说C++里面的函数在这里叫类的方法或者类的成员函数。
C#代码
类定义:
class Test
{
int Add(int num)
{
return num + 1;
}
public void Show()
{
int i=Add(2);
Console.WriteLine(i);
}
}
使用:
Test t = new Test();
t.Show();

这个程序显示的结果都是一样的:3。

事实上,我觉得,对于面向对象的编程来说,在类里面定义方法的实现,也就是包含了方法的声明,不同的是,在类里面定义方法没有先后顺序,定义在后面的方法也能被定义在前面的方法使用。

这是一个理解上的问题,我的理解都需要声明,方法的定义其实也声明了方法。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-20
C#的所有方法封装在类中,类的方法没有先后之分,无需声明。
//
而C++必须在函数调用前,由编译器检查参数类型是否合法,所以必须知道函数的原形(protype),所以必须提前声明函数的签名(signature).也就是你所说的声明。
//
这个具体涉及到编译原理,C#,C++的编译模型不同,我这里就不在多说,有兴趣私下交流把!!
第2个回答  2023-04-01
(一) 调用DLL中的非托管函数一般方法
首先,应该在C#语言源程序中声明外部方法,其基本形式是:
[DLLImport(“DLL文件”)]
修饰符 extern 返回变量类型 方法名称 (参数列表)
其中:
DLL文件:包含定义外部方法的库文件。
修饰符: 访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。
返回变量类型:在DLL文件中你需调用方法的返回变量类型。
方法名称:在DLL文件中你需调用方法的名称。
参数列表:在DLL文件中你需调用方法的列表。
注意:需要在程序声明中使用System.Runtime.InteropServices命名空间。
DllImport只能放置在方法声明上。
DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path所设置的路径)。
返回变量类型、方法名称、参数列表一定要与DLL文件中的定义相一致。
其它可选的 DllImportAttribute 属性:
CharSet 指示用在入口点中的字符集,如:CharSet=CharSet.Ansi;
SetLastError 指示方法是否保留 Win32"上一错误",如:SetLastError=true;
ExactSpelling 指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配,如:ExactSpelling=false;
PreserveSig指示方法的签名应当被保留还是被转换, 如:PreserveSig=true;
CallingConvention指示入口点的调用约定, 如:CallingConvention=CallingConvention.Winapi;
此外,关于“数据封送处理”及“封送数字和逻辑标量”请参阅其它一些文章。
举例:
New file,选择visual C# Class。在文件中,创建一个public的类。把待测试的函数在这个类中作声明。
public class ClassName
{
[DllImport("xxx.dll", EntryPoint = "xx")]
public static extern int StartVideo(int nDevNum, int SwitchingChans, IntPtr Main, IntPtr hwndPreview);
}
Xxx为待测试的dll名称,xx为dll中提供的方法函数。若要使用其它函数名,可以使用EntryPoint属性设置。可以按照喜好随意命名对应的C#别名,但是让C#方法名称与相应的函数名称一致,可以保证代码的可读性。类似,你也可以任意命名C#方法的参数。但,好的策略是让C#参数的名称和实际待用的函数的参数名称一致,理由同上。
如何用DllImport调用DLL中的非托管函数,但是这个是全局的函数,假若DLL中的非托管函数有一个静态变量S,每次调用这个函数的时候,静态变量S就自动加1。结果,当需要重新计数时,就不能得出想要的结果。所以,要注意啊,用DllImport调用DLL中的非托管函数是全局的、静态的函数。
第3个回答  2009-07-20
写方法的时候就是声明了
我没学过C++,学过写下C
是这样的,如果你的方法是写在MAIN函数的下面的话,就要事先在MAIN前面声明这个方法,你也可以直接在MAIN前面写方法
C#就没有这样,C#方法都是封装在类里面的
第4个回答  2009-07-20
c#可以先声明在使用,也可以直接在类里面声明+实现.注意,无论哪种都是在类或接口了声明.
c++和c一样,需要先在头文件里定义,再使用;但是c没有类的概念,所有都在头文件里声明,实现.c++在头文件定义,在类文件里实现.
相似回答