类的静态成员函数该如何访问类的静态成员变量呢?

Tidal_Choidi 2014-02-26 05:48:57
先看代码

using system.IO;
.....
.....

Namespace XXX
{
class A
{
private int a;
public A(int b)
{
this.a=b;
}
public static void func1(string str1)
{
//在此处想实现将a的值转换成字符串之后赋给参数str1
//在此操作访问变量a的时候会报错。


}
}
}


纠结: 如果将a声明为static类型的话,该类的构造函数在初始化的时候又会出错。
因为在别的地方在实例化A对象的时候必须要传一个参数过来,把这个参数赋给变量a,而类的内部的静态方法又想访问变量a,因此问题就出来了:
如果把a声明成static的话,静态方法可以访问,但是构造的时候会出错。不声明为static,静态方法又不能访问。怎么样能达到 既能正确构造,有可以被静态方法正常访问呢?
查了一些资料,说可以使用对象的指针来间接访问非静态成员,但是在实例化对象的时候A类的构造函数中需要接受的参数又没有,纠结中。。。
...全文
827 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐的小猪 2014-02-26
  • 打赏
  • 举报
回复
多么简单的事情,你把构造函数里面this.去掉就行了。 因为如果是静态变量,就不是this这个实例的拉。 public A(int b) { this.a=b;//删掉this } 给你个测试的控制台demo
class A
    {
        public  static  int a=0;
        public A(int b)
        {
            a = b;
        }
        public static void func1(string str1)
        {
            //在此处想实现将a的值转换成字符串之后赋给参数str1
            //在此操作访问变量a的时候会报错。

            a = int.Parse(str1);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(A.a);
            A A1 = new A(3);
            Console.WriteLine(A.a);
            A.func1("9");
            Console.WriteLine(A.a);
            Console.Read();
        }
    }
Tidal_Choidi 2014-02-26
  • 打赏
  • 举报
回复
引用 4 楼 hbu_pig 的回复:
你的func1方法是静态的,代表fun1方法是不依赖于任何具体的 class A对象的。 //在此处想实现将a的值转换成字符串之后赋给参数str1 //在此操作访问变量a的时候会报错。 虽然你这个代码想做的事情我不太清楚,因为str1是输入参数,而不是输出参数。 但你若想在此方法里面操作变量a,那么变量a就必须是静态的,不依赖于具体Class A对象而存在的。
//在此处想实现将a的值转换成字符串之后赋给参数str1---->这句话暂且不起作用。 你说的没错,我主要想实现的功能就是根据传入的参数str1,将str1作为判断条件,在该方法中实现对变量a的一些操作。要操作a就得将a声明成static,但是类A在构造的时候又要访问a,这不还是有问题吗?
Tidal_Choidi 2014-02-26
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
传一个实例: public static void func1(string str1, A instance) { instance.a = int.Parse(str1); }
该静态方法的参数列表只能有一个参数而且是string类型,即便参数列表可以修改,传入对象之前也需要进行实例化对象吧,调用该方法的dll文件是C++写的dll,这个方法是C#写的dll,按理讲的话,就是在另外一个dll文件调用该方法之前需要实例化一个A的对象,一个是C++dll一个是C#dll。。。呵呵,迷茫了。
欢乐的小猪 2014-02-26
  • 打赏
  • 举报
回复
你的func1方法是静态的,代表fun1方法是不依赖于任何具体的 class A对象的。 //在此处想实现将a的值转换成字符串之后赋给参数str1 //在此操作访问变量a的时候会报错。 虽然你这个代码想做的事情我不太清楚,因为str1是输入参数,而不是输出参数。 但你若想在此方法里面操作变量a,那么变量a就必须是静态的,不依赖于具体Class A对象而存在的。
Tidal_Choidi 2014-02-26
  • 打赏
  • 举报
回复
引用 1 楼 feiyun0112 的回复:
//在此处想实现将a的值转换成字符串之后赋给参数str1 为什么要在静态函数里做? ***************************************************************************** 签名档: http://feiyun0112.cnblogs.com/
该静态函数是一个dll文件里的其中的一个类的方法,另外一个dll文件调用了该方法,传回参数str1,该静态方法的静态属性是另外一个dll文件的调用约定且不能修改静态属性。
threenewbee 2014-02-26
  • 打赏
  • 举报
回复
传一个实例: public static void func1(string str1, A instance) { instance.a = int.Parse(str1); }
feiyun0112 2014-02-26
  • 打赏
  • 举报
回复
//在此处想实现将a的值转换成字符串之后赋给参数str1
为什么要在静态函数里做?

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧