请问怎么把动态代码缝合到现有的类中?

q199308040000 2017-11-09 11:07:33
开发WPF的时候,每个附加属性都要有一个GetSet封装,而这些方法都几乎是一样的,觉得很麻烦,想要通过动态代码自动生成这些方法,但是在网上查了一下,好像只看到了动态生成新类的教程,不知道怎么把代码缝合到现有的类里面,想请教下各位大神应该怎么解决?谢谢大家!
...全文
233 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
第三方的框架很多。但是你首先要了解 .net framework 中原装有什么东西,才能更好地了解第三方的东西。有很多开发人员根本不学 .net,而只知道从 java 等移植的一些概念。
  • 打赏
  • 举报
回复
在 .net framework中,正规的是 MEF 框架,这是搞 .net 开发技术的知识点。
秋的红果实 2017-11-13
  • 打赏
  • 举报
回复
不建议去弄什么动态编程,常规的东西足够用了,那东西不保险 你可以加一个类,封装属性,然后继承
threenewbee 2017-11-12
  • 打赏
  • 举报
回复
codedom,emit+派生类,expendroObject,都可以
cheng2005 2017-11-12
  • 打赏
  • 举报
回复
引用 9 楼 q199308040000 的回复:
和大家说明一下,我指的是WPF的附加属性,不是CLR属性,类似这种形式: public static int GetGrade(DependencyObject obj) { return (int)obj.GetValue(GradeProperty); } public static void SetGrade(DependencyObject obj, int value) { obj.SetValue(GradeProperty, value); } public static readonly DependencyProperty GradeProperty = DependencyProperty.RegisterAttached("Grade", typeof(int), typeof(School), new UIPropertyMetadata(0));
不是告诉你用代码段了吗?dpprop,自己研究去。
q199308040000 2017-11-10
  • 打赏
  • 举报
回复
和大家说明一下,我指的是WPF的附加属性,不是CLR属性,类似这种形式: public static int GetGrade(DependencyObject obj) { return (int)obj.GetValue(GradeProperty); } public static void SetGrade(DependencyObject obj, int value) { obj.SetValue(GradeProperty, value); } public static readonly DependencyProperty GradeProperty = DependencyProperty.RegisterAttached("Grade", typeof(int), typeof(School), new UIPropertyMetadata(0));
cheng2005 2017-11-10
  • 打赏
  • 举报
回复
代码段啊,dprop
mk_lucifer 2017-11-10
  • 打赏
  • 举报
回复
说明以下 ICustomTypeDescriptor 这个接口主要时为DataView,DataRowView绑定提供的,因为DataRowView的字段用不了反射,所以微软来了这个接口,目的就是适应千变万化的DataTable字段绑定,这东西你也可以用。一可以做到任意类型的数据反射。
mk_lucifer 2017-11-10
  • 打赏
  • 举报
回复
不知道你想表达什么,就算代码时临时生成和编译的,总要有个抽象接口吧,自动生成的程序集只要继承该接口或抽象类,通过接口和抽象类访问即可。。。如果没有接口,那就靠反射属性或方法,不然还有啥办法????C#还有个ICustomTypeDescriptor接口可以代替反射进行WPF属性绑定,你可以通过他代替反射。。。。总之无规矩不成方圆,没接口和抽象定义,都是瞎扯淡。 比如一个一本万利的方法, 一个接口 IGetPropertyValue{ object GetValue(string Field); string[] EnumField(); } 然后让你写个封装类 继承ICustomTypeDescriptor 他可以通过识别 IPropertyValue{ object GetValue(string Field); string[] EnumField(); } ,构造不同的ICustomTypeDescriptor内容,就OK,这样任何继承IPropertyValue接口的都可以间接支持WPF属性绑定。 既然你的代码时自动生成的,你直接生成这样的代码。 class A{ public p1 {get;set;} public p2 {get;set;} } 只要你能得到A的Type对象 直接 Control.DataContext=Activator.CreateInstance(AType)。 毫无问题。Controls随便绑定 p1,p2属性,帮任何其他类都行,只要他有名叫 p1,p2的属性即可。
正怒月神 2017-11-10
  • 打赏
  • 举报
回复
引用 楼主 q199308040000 的回复:
开发WPF的时候,每个附加属性都要有一个GetSet封装,而这些方法都几乎是一样的,觉得很麻烦,想要通过动态代码自动生成这些方法,但是在网上查了一下,好像只看到了动态生成新类的教程,不知道怎么把代码缝合到现有的类里面,想请教下各位大神应该怎么解决?谢谢大家!
想法是好的,经验是不够的。
xzxmustwin 2017-11-10
  • 打赏
  • 举报
回复
自己写一个页面,参数传表名。从数据库获取表,根据字段不同的类型进行不同的getset初始化。大概是这样的

        string tableName = TextBox1.Text;

        string query = "select top 1 * from " + tableName;

        DataTable table = BookDAL.SqlHelper.ExecuteDataTable(BookDAL.SqlHelper.GetConnSting(), CommandType.Text, query);

        string data = "";

        foreach (DataColumn col in table.Columns)
        {
            string colName = col.ColumnName;

            string colNameUpper = colName.ToUpper();

            Type colType = col.DataType;

            string colTypeName = colType.Name;

            #region===String===

            if (colTypeName == "String")
            {
                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public string " + colName + @" { get; set; }

";

            }

            #endregion

            #region===DateTime===

            else if (colTypeName == "DateTime")
            {
                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public DateTime? " + colName + @" { get; set; }

";

            }

            #endregion

            #region===Double===

            else if (colTypeName == "Double")
            {
                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public Double " + colName + @" { get; set; }

";

            }

            #endregion

            #region===Int32===

            else if (colTypeName == "Int32")
            {

                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public int " + colName + @" { get; set; }

";
            }

            #endregion

            #region===Boolean===

            else if (colTypeName == "Boolean")
            {

                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public Boolean " + colName + @" { get; set; }

";
            }

            #endregion

            #region===Decimal===

            else if (colTypeName == "Decimal")
            {
                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public Double " + colName + @" { get; set; }

";
            }
            #endregion

            #region===其它===

            else
            {
                data = @"///<summary>
    /// " + colName + "-" + colTypeName + @"
    /// </summary>
    public string " + colNameUpper + @" { get; set; }

";
            }
shoppo0505 2017-11-10
  • 打赏
  • 举报
回复
引用 楼主 q199308040000 的回复:
开发WPF的时候,每个附加属性都要有一个GetSet封装,而这些方法都几乎是一样的,觉得很麻烦,想要通过动态代码自动生成这些方法,但是在网上查了一下,好像只看到了动态生成新类的教程,不知道怎么把代码缝合到现有的类里面,想请教下各位大神应该怎么解决?谢谢大家!
ctrl+R+E就解决了阿,还行吧。
  • 打赏
  • 举报
回复
poco不都这样吗?必须的过程,你觉得C#的get;set麻烦,java的get set不会要让你崩溃?
exception92 2017-11-10
  • 打赏
  • 举报
回复
想要通过动态代码自动生成这些方法 -》如果wpf里没有一个特定的属性代码规则,那wpf里的属性定义岂不是乱套了!

110,538

社区成员

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

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

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