请问大虾如何动态创建属性?
现在情况是这样的,某类的属性有多少可能会不一样,具体需要看具体实例化这个类的时候,比如: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属性,但我不想改变代码来实现。有没有别的实现方式呢?比如说通过读取配置文件或某种方式动态设置这个类的属性。请诸位大侠帮忙。 --------------------编程问答-------------------- 用程序的属性可能没办法,我不清楚。你可以用比如xml文件的属性来弄。 --------------------编程问答-------------------- Dictionary<string, object> 可以吗?
--------------------编程问答-------------------- 明明写个属性就能连声明带程序全都搞定,你还要搞一堆xml来声明什么呢?是省事还是拿你的公司项目在耍呢? --------------------编程问答--------------------
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"]);
}
}
}
}
--------------------编程问答-------------------- 很深奥的问题, --------------------编程问答-------------------- 为什么没有人回答呢? --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 为什么不考虑做个Dictionary来存值呢?
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>();}
}
就算实现了动态属性, 你使用的时候怎么使用呢?
难道不断地反射吗? --------------------编程问答-------------------- 要动态添加属性肯定要反射啊。或者直接声明,如果某个属性不用,不添加值就可以啊。
补充:.NET技术 , C#