求一个类的写法

chookrib 2004-09-01 02:09:03
我想构造一个类,里面全是一些固定值,想调用的时候不要通过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";
}
}
哪位有什么好的方法能让我达到这个效果的,谢谢!
...全文
206 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightheroes 2004-09-01
  • 打赏
  • 举报
回复
只能说你的需求比较怪异
------------
现在调用ns.A.B.temp,返回值为aaa
但是调用ns.A.B.id,返回值却为bbb2,我想要返回值为aaa2,在保留现有这些功能的同时,能实现吗?
------------
你到底是想要哪个temp?整个儿就乱套了

重新整理思路吧
chookrib 2004-09-01
  • 打赏
  • 举报
回复
再顶一下
777kit 2004-09-01
  • 打赏
  • 举报
回复
OriesMap 2004-09-01
  • 打赏
  • 举报
回复
帖子沉底了。顶上来!
chookrib 2004-09-01
  • 打赏
  • 举报
回复
换成结构怎么写,我这样写
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.???来访问属性
张海霖 2004-09-01
  • 打赏
  • 举报
回复
看来我真是水平有限,不过个人认为如果只是要用static值,用不着弄成类。
有其他的选择,比如结构。
chookrib 2004-09-01
  • 打赏
  • 举报
回复
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);
}
revel 2004-09-01
  • 打赏
  • 举报
回复
哦,这么麻烦
lnzyquan 2004-09-01
  • 打赏
  • 举报
回复
看看有没有效果:)


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";
}
}
张海霖 2004-09-01
  • 打赏
  • 举报
回复
试一下。
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.csdn.net/Expert/topic/3328/3328318.xml?temp=.382641
chookrib 2004-09-01
  • 打赏
  • 举报
回复
现在又有新问题了,我其它是要这样用
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,在保留现有这些功能的同时,能实现吗?多谢
flower_open 2004-09-01
  • 打赏
  • 举报
回复
有難度
happyno7 2004-09-01
  • 打赏
  • 举报
回复
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";
}
chookrib 2004-09-01
  • 打赏
  • 举报
回复
回复人: oceanju(ocean) ( ) 信誉:100
不行呀,编译都过不了
D:\My Documents\Visual Studio Projects\Test\Class2.cs(15): 无法使用实例引用访问静态成员“ns.B.id”;改用类型名来限定它
张海霖 2004-09-01
  • 打赏
  • 举报
回复

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 2004-09-01
  • 打赏
  • 举报
回复
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";
}
}
微启子 2004-09-01
  • 打赏
  • 举报
回复
楼上说的,有吗!!
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来直接取属性值了
}
使用友元可以访问内部属性!
其他的话!要提供类的方法来获得类的属性!
xiangding 2004-09-01
  • 打赏
  • 举报
回复
听说delphi9就有楼主想要的功能,不知道vs2003有没有,呵,
关注

111,097

社区成员

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

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

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