请问大虾如何动态创建属性?

liujichang1727 2010-04-06 08:03:58
现在情况是这样的,某类的属性有多少可能会不一样,具体需要看具体实例化这个类的时候,比如:
public class student
{
private string name;
private string number;

public string Name
{
get{return name;}
set{name=value;}
}

public string Number
{
get{return number;}
set{nnumber=value;}
}
}
现在student类有2个属性Name跟Number,但后面根据需求要增加或删除某个属性,例如增加一个Age属性,但我不想改变代码来实现。有没有别的实现方式呢?比如说通过读取配置文件或某种方式动态设置这个类的属性。请诸位大侠帮忙。
...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyboyxq 2010-04-07
  • 打赏
  • 举报
回复
要动态添加属性肯定要反射啊。或者直接声明,如果某个属性不用,不添加值就可以啊。
cjcgy 2010-04-07
  • 打赏
  • 举报
回复
为什么不考虑做个Dictionary来存值呢?

就算实现了动态属性, 你使用的时候怎么使用呢?

难道不断地反射吗?
xiaojin0710 2010-04-07
  • 打赏
  • 举报
回复
学习了
liujichang1727 2010-04-07
  • 打赏
  • 举报
回复
为什么没有人回答呢?
xhddd111 2010-04-06
  • 打赏
  • 举报
回复
很深奥的问题,
我姓区不姓区 2010-04-06
  • 打赏
  • 举报
回复

public class student
{
private string name;
private string number;

public string Name
{
get{return name;}
set{name=value;}
}

public string Number
{
get{return number;}
set{nnumber=value;}
}

public Dictionary<string,object> DynamicProps{get;set;}

public student(){ DynamicProps = new Dictionary<string,object>();}
}

  • 打赏
  • 举报
回复
明明写个属性就能连声明带程序全都搞定,你还要搞一堆xml来声明什么呢?是省事还是拿你的公司项目在耍呢?
宝_爸 2010-04-06
  • 打赏
  • 举报
回复
Dictionary<string, object> 可以吗?


using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1 {

class ObjectWithProperties {
Dictionary<string, object> properties = new Dictionary<string,object>();

public object this[string name] {
get {
if (properties.ContainsKey(name)){
return properties[name];
}
return null;
}
set {
properties[name] = value;
}
}

}

class Comparer<T> : IComparer<ObjectWithProperties> where T : IComparable {

string m_attributeName;

public Comparer(string attributeName){
m_attributeName = attributeName;
}

public int Compare(ObjectWithProperties x, ObjectWithProperties y) {
return ((T)x[m_attributeName]).CompareTo((T)y[m_attributeName]);
}

}

class Program {

static void Main(string[] args) {

// create some objects and fill a list
var obj1 = new ObjectWithProperties();
obj1["test"] = 100;
var obj2 = new ObjectWithProperties();
obj2["test"] = 200;
var obj3 = new ObjectWithProperties();
obj3["test"] = 150;
var objects = new List<ObjectWithProperties>(new ObjectWithProperties[]{ obj1, obj2, obj3 });

// filtering:
Console.WriteLine("Filtering:");
var filtered = from obj in objects
where (int)obj["test"] >= 150
select obj;
foreach (var obj in filtered){
Console.WriteLine(obj["test"]);
}

// sorting:
Console.WriteLine("Sorting:");
Comparer<int> c = new Comparer<int>("test");
objects.Sort(c);
foreach (var obj in objects) {
Console.WriteLine(obj["test"]);
}
}

}
}

足球中国 2010-04-06
  • 打赏
  • 举报
回复
用程序的属性可能没办法,我不清楚。你可以用比如xml文件的属性来弄。

110,535

社区成员

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

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

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