当前位置:编程学习 > C#/ASP.NET >>

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

现在情况是这样的,某类的属性有多少可能会不一样,具体需要看具体实例化这个类的时候,比如:
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> 可以吗?


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"]); 
            } 
        } 
 
    } 


--------------------编程问答-------------------- 明明写个属性就能连声明带程序全都搞定,你还要搞一堆xml来声明什么呢?是省事还是拿你的公司项目在耍呢? --------------------编程问答--------------------

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>();}
}  

--------------------编程问答-------------------- 很深奥的问题, --------------------编程问答-------------------- 为什么没有人回答呢? --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 为什么不考虑做个Dictionary来存值呢?

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

难道不断地反射吗? --------------------编程问答-------------------- 要动态添加属性肯定要反射啊。或者直接声明,如果某个属性不用,不添加值就可以啊。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,