求一个类的写法
我想构造一个类,里面全是一些固定值,想调用的时候不要通过new来创建实例,所以全部用static,大概样子如下
namespace ns
{
public class A
{
public static string id = "1";
public static string name = "class A";
public class B
{
public static string temp = "aaa";
public static string id = "2";
public static string name = "class B";
}
}
public class B
{
public static string temp = "bbb";
public static string id = "2";
public static string name = "class B";
}
}
其中class ns.A.B和 class ns.B就一个变量不一样,其它都是一样的,在实际使用中,有很多这么种嵌套引用,而且属性数量也很多,我不想重复地拷贝,粘贴class B的内容,希望更改了class B的某个属性其它类中的class B的相关属性都自动更改
我尝试这样写,但是不行
namespace ns
{
public class A
{
public static string id = "1";
public static string name = "class A";
public static B B = new ns.B("aaa"); //但这样写,就不能通过 ns.A.B.id来直接取属性值了
}
public class B
{
public B(string initvar)
{
temp = initvar;
}
public static string temp = "bbb";
public static string id = "2";
public static string name = "class B";
}
}
哪位有什么好的方法能让我达到这个效果的,谢谢!
[1203 byte] By [
chookrib] at [2008-2-16]
听说delphi9就有楼主想要的功能,不知道vs2003有没有,呵,
关注
楼上说的,有吗!
VS2003我想估计是没有
类是对象的抽象化!
一般使用会实例化!
你所想要的功能很难实现!
public class A
{
public static string id = "1";
public static string name = "class A";
public static B B = new ns.B("aaa"); //但这样写,就不能通过 ns.A.B.id来直接取属性值了
}
使用友元可以访问内部属性!
其他的话!要提供类的方法来获得类的属性!
namespace ns
{
public class A
{
public static string id = "1";
public static string name = "class A";
public static ns.B B = new ns.B("aaa"); //这样写,完全可以通过 ns.A.B.id来直接取属性值了,应为B是ns.B的一个实例,作为实例自然可以访问到类的静态变量。
}
public class B
{
public B(string initvar)
{
temp = initvar;
}
public static string temp = "bbb";
public static string id = "2";
public static string name = "class B";
}
}
namespace ns
{
public class A
{
public static string id = "1";
public static string name = "class A";
public class B:ns.B
{
public static string temp = "aaa";
}
}
public class B
{
public static string temp = "bbb";
public static string id = "2";
public static string name = "class B";
}
}
回复人: oceanju(ocean) ( ) 信誉:100
不行呀,编译都过不了
D:\My Documents\Visual Studio Projects\Test\Class2.cs(15): 无法使用实例引用访问静态成员“ns.B.id”;改用类型名来限定它
try:
-----------------------------------------------------
public class A
{
public static string id = "1";
public static string name = "class A";
public class B : c
{
public static string temp = "aaa";
}
}
public class B : c
{
public static string temp = "bbb";
}
public class c
{
public static string id = "2";
public static string name = "class B";
}
现在又有新问题了,我其它是要这样用
namespace ns
{
public class A
{
public static string id = "1";
public static string name = "class A";
public class B:ns.B
{
public static string temp = "aaa";
}
}
public class B
{
public static string temp = "bbb";
public static string id = temp + "2";//这里用到了temp
public static string name = temp + "class B";//这里用到了temp
}
}
现在调用ns.A.B.temp,返回值为aaa
但是调用ns.A.B.id,返回值却为bbb2,我想要返回值为aaa2,在保留现有这些功能的同时,能实现吗?多谢
试一下。
namespace ns
{
public class A
{
public static string id = "1";
public static string name = "class A";
public class B:ns.B
{
public static string temp = "aaa";
}
}
public class B
{
public static string temp = "bbb";
public b(){
public static string id = temp + "2";//这里用到了temp
public static string name = temp + "class B";//这里用到了temp
}
}
}
支持我一下
http://community.Codefund.cn/Expert/topic/3328/3328318.xml?temp=.382641
看看有没有效果:)
using System;
namespace ns1
{
public class A
{
public static string id = "1";
public static string name = "class A";
public static C ab = new C();
static void Main()
{
Console.WriteLine(B.Install().temp );
Console.WriteLine(ab.temp );
Console.WriteLine(B.Install().temp );
Console.WriteLine(ab.temp );
Console.WriteLine(ab.temp );
Console.WriteLine(B.Install().temp );
}
}
public class C:B
{
public new string temp = "aaa";
}
public class B
{
static B _b = null;
public static B Install()
{
if ( _b == null )
{
_b = new B();
}
return _b;
}
public string temp = "bbb";
public string id = "2";
public string name = "class B";
}
}
to 回复人: btut2004(《电子产品世界》程序员,卖富爸爸光盘) ( ) 信誉:100
已支持
这样写编译不通过,按你的意思修改后还是没达到效果
to回复人: lnzyquan(可乐熊) ( ) 信誉:92
这样写取不到A.ab.Install().name这个属性,提示d:\my documents\visual studio projects\windowsapplication1\form1.cs(91,20): error CS0176: 无法使用实例引用访问静态成员“ns1.B.Install()”;改用类型名来限定它
我是在这两个类外面调用它的值的,
private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(ns1.A.ab.temp);
MessageBox.Show(ns1.A.ab.Install().name);
}
看来我真是水平有限,不过个人认为如果只是要用static值,用不着弄成类。
有其他的选择,比如结构。
换成结构怎么写,我这样写
namespace ns
{
public struct A
{
public static string id = "1";
public static string name = "class A";
public static B b = new B("aaa");
}
public struct B
{
public B(string initvar)
{
tmep = initvar;
}
public static string temp = "bbb";
public static string id = "2";
public static string name = "class B";
}
}
还是不对,不能通过ns.A.b.?来访问属性
只能说你的需求比较怪异
------------
现在调用ns.A.B.temp,返回值为aaa
但是调用ns.A.B.id,返回值却为bbb2,我想要返回值为aaa2,在保留现有这些功能的同时,能实现吗?
------------
你到底是想要哪个temp?整个儿就乱套了
重新整理思路吧