xaf.domain object new 在属性上的用法

有如下业务对象定义:

using System;
using System.Linq;
using System.Text;
using DevExpress.Xpo;
using DevExpress.ExpressApp;
using System.ComponentModel;
using DevExpress.ExpressApp.DC;
using DevExpress.Data.Filtering;
using DevExpress.Persistent.Base;
using System.Collections.Generic;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Persistent.Validation;

namespace TestXPO.Module.BusinessObjects
{  //往来单位:供应商,客户都是此类的派生类
    [XafDefaultProperty("Name")]
    [DefaultClassOptions]
    public abstract class CompanyUnit : BaseObject
    {
        public CompanyUnit(Session s) : base(s)
        {

        }
        public string Name
        {
            get { return GetPropertyValue<string>(nameof(Name)); }
            set { SetPropertyValue(nameof(Name), value); }
        }
    }

    [DefaultClassOptions]
    [XafDefaultProperty(nameof(Address))]
    public class Customer : CompanyUnit
    {
        public Customer(Session s) : base(s)
        {

        }
        public string Address
        {
            get { return GetPropertyValue<string>(nameof(Address)); }
            set { SetPropertyValue(nameof(Address), value); }
        }
    }

    [DefaultClassOptions]
    public class Provider : CompanyUnit
    {
        public Provider(Session s) : base(s)
        {

        }

    }

    public class Dept : CompanyUnit
    {
        public Dept(Session s) : base(s)
        {

        }
    }
  //存在某种单据基类:  //使用了CompanyUnit做为属性的类型  //在派生类中new TargetUnit重新定义此属性的类型,则可以成功  //可以达到使用真实类型过滤的作用.  //但如果使用Guid类型声明,并且派生类中用复杂类型,则不能成功
    [DefaultClassOptions]
    public class FormBase : BaseObject
    {
        public FormBase(Session session)
            : base(session)
        {
        }

        public CompanyUnit TargetUnit
        {
            get { return GetPropertyValue<CompanyUnit>(nameof(TargetUnit)); }
            set { SetPropertyValue(nameof(TargetUnit), value); }
        }
    }

    [DefaultClassOptions]
    public class PMSOrder : FormBase
    {
        public PMSOrder(Session s) : base(s)
        {

        }
        public new Provider TargetUnit
        {
            get { return GetPropertyValue<Provider>(nameof(TargetUnit)); }
            set { SetPropertyValue(nameof(TargetUnit), value); }
        }
    }

    [DefaultClassOptions]
    public class SMSOrder : FormBase
    {
        public SMSOrder(Session s) : base(s)
        {

        }
        public new Customer TargetUnit
        {
            get { return GetPropertyValue<Customer>(nameof(TargetUnit)); }
            set { SetPropertyValue(nameof(TargetUnit), value); }
        }
    }
}
时间: 2024-10-09 05:39:51

xaf.domain object new 在属性上的用法的相关文章

TextBox 绑定到DataTable某一列属性上

将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", dt, "columnName", true); 当修改TextBox值时,必须要鼠标手动点击对应DataTable 列单元格(绑定到DataGridView中显示)才会更新,如何实时自动更新呢? 可以在TextBox中添加Validated事件(或者MouseLeave事件)实现更新D

Object的新属性方法

ECMAScript5 Object的新属性方法 虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都或多或少的支持了ECMAScript5的新特性,其中重中之重自然是一切对象的基类型--Object Object.create(prototype[,descriptors]) 这个方法用于创建一个对象,并把其prototype属性赋值为第一个参数,

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上。

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上.当然,在某些情况下,我们需要将某些方法定义在构造函数中,这种情况一般是因为我们需要访问构造函数内部的私有变量.

javascript: object对象按属性排序的方法

javascript中在使用ajax和服务端交互时会遇到这样的场景,服务端返回json格式数据,前端展示时需要对数据进行某种排序,比如升序.降序. 可以利用 sort() 自定义排序规则来实现,例如返回的一段json数据,按照年龄升序排列. 1 var res = { 2 success: true, 3 result: [ 4 { 5 id: 1, 6 name: 'Jack', 7 age: 21 8 }, 9 { 10 id: 2, 11 name: 'Tom', 12 age: 23 1

Java 使用反射获取类、方法、属性上的注释

有的时候我们想使用反射获取某个类的注释.方法上的注释.属性上的注释. 下面是一个简单的例子.里面包括了上面提到的三个点. package com.mine.practice.reflectfield; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.xml.bind.annotation.XmlAccessTy

【阿里云IoT+YF3300】3. Alink物模型之属性上传和下发

[名词解释]属性:设备的功能模型之一,一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等.属性支持 GET 和 SET 请求方式.应用系统可发起对属性的读取和设置请求. 在上一篇文章<阿里云IoT云端通信Alink协议介绍>中,我们已经简单介绍了Alink属性相关的知识内容.本篇文章将以实际的设备为例,对该部分内容进行实操.以便于网友对这部分内容有一个更深的认知. 首先我们需要做如下几方面的工作: 1. 需要有一个YF3300硬件设备,YF3300自带1路RS485,1路RS2

Javascript属性:addEvent()用法浅析

做 web 应用的人,经常会用到 Javascript 来处理页面上的一些事情.表单验证我们不谈,在根据用户使用情况,显示/隐藏,或者执行一段 js function,的时候,我们需要和页面的 DOM 树打交道.看看 Gmail ,发送邮件,按下"发送"钮后,用 Ajax 在后端发送邮件内容,根据返回的状态,在编辑页面的上方直接显示一小段文字"您的邮件已经发送.". 通常的思想,我们会在那个发送按钮里面写上: onclick="javascript:sen

删除对象的属性 delete的用法

Javascript的变量 实际上JavaScript中,变量 = 对象属性,这是因为 Javascript 在执行脚本之前会创建一个Global对象,所有的全局变量都是这个Global对象的属性,执行函数时也会创建一个Activation对象,所有的局部变量都是这个Activation对象的属性.如下例: var global = 42; this.global; // 42, 可以通过this来访问Global对象 this.global2 = 12; global2; // 12 func

CSS3动画属性animation的用法

转载: 赞生博客 高端订制web开发工作组 » CSS3动画属性animation的用法 CSS3提供了一个令人心动的动画属性:animation,尽管利用animation做出来的动画没有flash或者javascript做出的动画流畅绚丽,但是从代码量和开发时间上提供了便利. animation基本语法是: animation:name keeping-time animate-function delay times iteration final; 第一个参数:name: 动画的名字,即