如何在C#中,在一个类里调用另外一个类的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中,在一个类里调用另外一个类的方法相关的知识,希望对你有一定的参考价值。
两个类A,B(均为public)处于同一命名空间,定义B类的成员方法时,想在其中调用A类的一个public方法,B类中没有A类创建的对象,想直接调用A类的成员方法,现在总是提示“当前上下文中不存在名称******”(******为A类的成员方法名)
如何实现?
如果要通过类名来用方法的话,那其中的方法必须是静态方法,需加上static。即public static void get() ...。静态方法是跟类关联的,允许不对classA实例化,就可以用它的方法。
把A类有引用的方法加static
public class A
public static void MethodA()//如果不是static 就要实例化才能调用
public class B
public void MethodB
A.MethodA();//第一种方式
如果MethodA()没有加static关键字
则使用 new A().MethodA();
语言结构
类:一个基本的C#类中包含数据成员、属性、构造器和方法。属性可以是静态或实例成员。在C#中类的声明与C++和Java很相似。但是,不像C++,C#结构体与类是不支持继承多个父类。但是,与Java相同的是,一个结构体可以实现接口(interface)。Java的关键字import已经被替换成using,它起到了同样的作用。
以上内容参考:百度百科-c#
参考技术A把A类你有引用的方法加static
public class A
public static void MethodA()//如果不是static 就要实例化才能调用
public class B
public void MethodB
A.MethodA();//第一种方式
如果MethodA()没有加static关键字
则使用 new A().MethodA();
【拓展资料】
C#是一个面向对象的编程语言。这种编程模式关注的是对象的行为和属性。比如猫抓老鼠这个例子中:猫和老鼠都是对象,用两个类表示:猫类Cat,老鼠类Mouse。
猫表现出了两种行为:听(老鼠的叫声)Listen(Mouse)和抓(老鼠)Catch(Mouse);至少一种属性:行动速度Speed。老鼠表现出了一种行为:叫Chitter;至少一种属性:叫声的大小Loudness。这样的话可以如下定义两个类:using System;class Cat public void Listen(Mouse m) Console.WriteLine("cat listening");
public void Catch(Mouse m) Console.WriteLine("cat catching"); public float Speed get; set; class Mouse public void Chitter() Console.WriteLine("mouse chittering"); public float Loudness get; set;
实现猫抓老鼠的过程,就是实例化上述两个类,并调用相关方法。编码如下:
using System; // 引用名字空间
class Cat // 实体对象(类):猫
public void Listen(Mouse m) Console.WriteLine("cat listening"); // 行为(方法):听老鼠叫
public void Catch(Mouse m) Console.WriteLine("cat catching"); // 行为(方法):捉老鼠
public float Speed get; set; // 属性:捉老鼠时的行动速度
class Mouse // 实体对象(类):老鼠
public void Chitter() Console.WriteLine("mouse chittering"); // 行为(方法):叫
public float Loudness get; set; // 属性:叫声的大小
class Program // 类:调用上述类,实现猫捉老鼠的过程
public static void Main() // 主函数,程序入口
Cat c = new Cat(); // 实例化一个猫
Mouse m = new Mouse(); // 实例化一个老鼠
Console.WriteLine("begin."); // 猫捉老鼠过程开始
m.Chitter(); // 老鼠发出叫声
c.Listen(m); // 猫听到老鼠叫声
c.Catch(m); // 毛捉住老鼠
Console.WriteLine("over."); // 猫捉老鼠过程结束
参考技术B 把A类你有引用的方法加static
public class A
public static void MethodA()//如果不是static 就要实例化才能调用
public class B
public void MethodB
A.MethodA();//第一种方式
如果MethodA()没有加static关键字
则使用 new A().MethodA();
参考技术C 把A类你有引用的方法加static
public class A
public static void MethodA()//如果不是static 就要实例化才能调用
public class B
public void MethodB
A.MethodA();
本回答被提问者采纳 参考技术D 一种是创建窗体对象的方式,通过对象调用控件或方法
例如:
Form1 form1 = new Form1();
form1.Button; //调用控件form1.Method(); //调用方法123
当然了,控件的Modifiers属性要设置成public
另一种是不创建窗体对象
在Form1类下定义静态变量,构造方法中引用这个Form1
class Form1: Form
public static Form1 form1;
public Form1()
InitializeComponent();
form1 = this;
public void Method()
123456789101112131415
调用该窗体的控件或方法:
Form1.form1.Button;Form1.form1.Method()。
C# 中如何调用DLL文件?
我在网上找了好久都没看明白,所以来这里请教高手们了,比如我将一个y.cs这个文件编译成y.dll放在 D:\ 下,y.dll文件中有一个print()方法。现在,我新建一个类x.cs,我要在这个类里调用y.dll,请问有几种方法?哪种最简单?请给我代码,谢谢!
还有一点,要将DLL文件放到bin目录里吗?如果不手动的复制过来,在打包成安装文件的时候它会自动的复制过来吗?新手,问题有点多,谢谢了!
一、创建dll文件:
例如生成一个md5编码判断状态的文件,即,输入一个字符串(string A)和一个32位md5编码(string B),判断此字符串A对应的32位md5编码是否与B相等,如果相等返回true,否则返回false。
打开VS 2005,“文件”--》“新建”--“项目”,选择“Windows 控件库”,命名后点击“确定”,在“UserControl1.cs”中输入以下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Text;
using System.Security.Cryptography;
namespace md5
public partial class Program : UserControl
#region MD5 32位加密:GetMd5Str32
/// <summary>
/// 32位MD5加密
/// </summary>
/// <param name="strSource">待加密字串</param>
/// <returns>加密后的字串</returns>
public static string GetMd5Str32(string strSource)
byte[] bytes = Encoding.ASCII.GetBytes(strSource);
byte[] hashValue = ((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 16; i++)
sb.Append(hashValue[i].ToString("x2"));
return sb.ToString().ToUpper();
#endregion
#region 核对md5编码是否一致:CheckMd5String()
/// <summary>
/// 核对md5编码是否一致
/// </summary>
/// <param name="ConvertString"></param>
/// <returns>如果一致返回true,否则返回false</returns>
///
public static bool CheckMd5String(string str1, string str2)
string md5String = str1; //需要验证的字符串
string md5DbString = str2; //需要核对的32位md5编码
int result = string.Compare(md5.Program.GetMd5Str32(str1), md5DbString, true);
if (result == 0)
return true;
else
return false;
#endregion
修改“UserControl1.Designer.cs”中的命名空间为“md5”,方法为“Program”,即可生成dll文件。
在...\bin\Debug文件假下,可以找到相应的dll文件。
二、部署dll流程:
首先把dll文件放到应用程序...\bin\Debug\下;
然后在解决方案中添加引用:右键鼠标-->添加引用-->浏览-->选择dll放置路径后点击“确定”。
注意:要在应用文件头处使用using md5;命令。
测试应用程序代码,如下:Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using md5;
namespace WindowsApplication1
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
string str1 = textBox1.Text.ToString();
string md5String = textBox2.Text.ToString();
textBox3.Text = md5.Program.GetMd5Str32(str1);
textBox4.Text = md5.Program.CheckMd5String(str1, md5String).ToString();
private void button2_Click(object sender, EventArgs e)
this.Close();
三、注意点:
1、在C#应用程序开发过程中,加载dll文件时,报错“未能加载文件或程序集“md5, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。”,请指点一下是什么原因?
解决:这是因为加载dll的路径问题,正确加载方式为:在“解决方案”的“引用”文件上右击鼠标,选择“添加引用”---》在“浏览”选项卡中添加引用(注意:自己定义的dll文件不能在“.NET”选项卡中添加。)
------------------------------------------------------------------------------------------------------------------
c#生成DLL文件,内部函数的问题
用C#编写一组处理XML文档的代码,由于要求生成DLL文件,并由外部的其他工具访问动态库中的文件,
但是用Dependency Walker检测我生成的这个DLL文件没有显示任何的函数,以前没做过这方面的东西,求教了
代码如下:
using System;
using System.IO;
using System.Xml;
public class Sample
public static void Main()
DeleteArg();
static void DeleteArg()
XmlDocument doc = new XmlDocument();
doc.Load(@"c:\\data1.xml");
XmlNode root = doc.DocumentElement;
XmlNode Node1;
XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes;
foreach (XmlNode xn in nodeList)
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Name") == "SysModuleID")
xe.RemoveAll();
//xe.RemoveAttribute("Name");//删除Name属性
doc.Save("c:\\data1.xml");//保存这个文档到文件中
以上代码实现删除XML文件中某一节点的功能,如何在生成DLL后能够使用检测工具检测出DeleteArg函数,
使用Dependency Walker没检测出该函数是不是以为着这个动态库文件不能被调用.
----
因为.net的程序不是这样把函数放在导出表的, 我记得.net做的dll只导出了一个_CorDllMain的方法,
所以用Dependency Walker是看不出来的. 如果你想看.net做的dll导出了什么内容,可以用反射查看元数据
----
生成这个DLL库文件,是想要别的工具运行这个动态库文件,实现DELETEARG()这个函数的功能
----
可以的
----
你上面的代码不是生成DLL的,而是一个控制台应用程序.
要想创建动态库(DLL),在新建项目窗口中选择"类库", 默认的代码是这样的:
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary2
public class Class1
// 然后添加你的代码.最后代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ClassLibrary2
public class Class1
public void DeleteArg()
XmlDocument doc = new XmlDocument();
doc.Load(@"c:\\data1.xml");
XmlNode root = doc.DocumentElement;
XmlNode Node1;
XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes;
foreach (XmlNode xn in nodeList)
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Name") == "SysModuleID")
xe.RemoveAll();
//xe.RemoveAttribute("Name");//删除Name属性
doc.Save("c:\\data1.xml");//保存这个文档到文件中
最后编译一下就可以,
在Debug文件夹下回产生一个dll文件,最后在需要的工程里,将这个dll文件引进进去就可以用. 参考技术A 楼主你的标题有误导人的嫌疑呀。呵呵
我帮你解释一下吧,你这里的调用dll用词不准
在。net平台上,调用dll文件有2种含义
1、调用托管dll,即你使用。net平台开发的dll,属于托管代码
2、调用非托管dll,即传统的dll,一般是C++,VB,DELPHI等等开发出来的,属于非托管代码。
从你的意思中看出来你现在是调用托管的dll,方法是 “在解决方案管理器” - “解决方案”(或项目) 中的任意地方, 右键“添加引用”,“浏览”,选择你需要调用的dll文件,确定即可,该dll会自动复制到bin目录,打包时也会自动复制到你发布的地方。
添加完了引用,现在如何调用呢?
如果有命名空间则引入命名空间,比如你的y。dll里面,是a命名空间,有一个b类,然后有一个无参数静态方法c
那么调用方法就是a.b.c(),跟你普通的使用类是一样的
然后是非托管dll
需要添加dll的名称,以及方法,也就是你所用到的dll的每个方法都需要添加一次,
[DllImport("msvcrt.dll")]
public static extern int puts(string c);
你这点分数对不住我一个一个敲出来的字啊。本回答被提问者采纳
以上是关于如何在C#中,在一个类里调用另外一个类的方法的主要内容,如果未能解决你的问题,请参考以下文章