显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

NDEB Exam Busters

加拿大面对面及远程考牌辅导

 
 
 
 
 
 

海外 加拿大 狮子座

 发消息  写留言

 
NDEB, NBDE, Part1, Part2, 移民, 考试 资料库 真题 AFK, National Board Dental Exam, Foreign Trained, 下载, Download, 美国 加拿大 行医资格考试
 
近期心愿N/A
人生格言中国交通很行 中国农业很行 中国工商很行 中国建设很行 中国人民很行 中国很行
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 

[置顶] 窝洞分类 - G.V.Black Cavity classification 分类

2010-3-13 18:15:18 阅读2807 评论0 132010/03 Mar13

G.V.Black分类

龋洞分类 - G.V.Black Cavity classification 分类 - godsonx - godsonx的博客

 

 

 考题:

哪些洞型可以出现在任何牙上?

 

答案:   Class I, Class V & Class VI   一类, 五类和六类洞

 

 

Cavity classification standardized methods of recording the need for restoration exist to facilitate communication among clinicians, researchers, and dental educators. The most commonly accepted means of classifying cavities is by the names of the surfaces involved. Cavity type is classified further based on the type of treatment and anatomical area involved. This classification, developed by Dr. G. V. Black in 1908, is designated by Roman numerals as Class I, Class II, Class III, Class IV, Class V, and Class VI (this is the only category that has been added to his original classification system). Note: It is important to remember that the classification relates to location and not size of the cavity.

#  Class I cavities -> involve the pits and fissures, while all other classifications involve smooth surfaces
of the teeth.
      #  Class II cavities -> involve the proximal surfaces and occlusal surfaces of premolars and molars.
      #  Class III cavities -> involve the proximal surfaces of incisors and canines that do not involve the
incisal angle.
      #  Class IV cavities -> are located on the proximal surface of incisors and canines and do involve
the incisal angle.
      #  Class V cavities -> are on the facial or lingual surface of ail teeth and do not involve a pit or fissure.
      #  Class VI cavities -> are on the incisal edges of anterior teeth or on the occlusal cusp heights of
posterior teeth.

** Remember: The best method for definitive detection of incipient carious lesions on the interproximal surfaces of posterior teeth (distal surface of canines through molars) is by bite-wing radiographs. 

 

 

 

I 类洞:为发生于所有牙齿的发育窝、沟内的龋损所制备的洞形。包括磨牙[牙合]面窝沟洞,磨牙颊(舌)面的颊(舌)沟洞,前磨牙的[牙合]面窝沟洞,上前牙的腭面窝洞。

II 类洞:为发生于后牙邻面的龋损所制备的洞形。包括前磨牙的邻面洞、邻[牙合]面洞和邻颊(舌)面洞,磨牙的邻[牙合]面洞和邻颊(舌)面洞及邻面洞。

III类洞:为发生于前牙邻面未损及切角的龋损所制备的洞形。包括切牙、尖牙的邻面洞、邻腭(舌)面洞、邻唇面洞。

IV类洞:为发生于前牙邻面并损及切角的龋损所制备的洞形。包括切牙、尖牙的邻唇腭(舌)面洞,目前含义延伸及牙外伤引起切角缺损的洞。

V类洞:为发生与所有牙齿的颊(唇)、舌(腭)面近龈1/3牙面的龋损所制备的洞形。包括前牙、前磨牙、磨牙在颊或舌面的近龈1/3洞。

 

窝洞定义、结构、各部名称、代表符号

(1)窝洞定义:牙齿龋洞去净龋坏组织,经手术制备的具有特定形状的洞。要求填入充填材料后,充填材料及牙齿均能承担正常咀嚼

压力,不折断、不脱落。

(2)窝洞结构:窝洞由洞壁、洞角及洞缘角构成。


    1)洞壁:组成窝洞的内面统称为壁。按其所在牙面部位命名如近中壁、远中壁、颊壁、舌壁、龈壁、髓壁、轴壁等。

    2)洞角:两个洞壁相交构成的角称为线角(Line angles),三个洞壁相交形成的角称为点角(Point angles)。线角及点角的命名

均以构成他们的各洞壁名称联合命名,如颊轴线角、轴髓线角、颊龈轴点角、舌龈轴点角等。

    3)洞缘角(Cavosurface Margin):洞侧壁与牙齿表面的相交线称为洞缘角,也称为洞面角。


(3)窝洞的名称及符号

    1)窝洞的名称:可根据窝洞所在的牙面命名,如牙合面洞、近中洞、近中牙合面洞等;也可以窝洞所包括牙面数命名,如单面

洞、复面洞等。

    2)窝洞的符号:以所在牙面英文名称的第一个字母或前两个字母作为符号,具体如下:

    切端为I(incisive S.)颊侧为B(buccal S.)

    舌侧为L(lingual S.)牙合面为O(occlusal S.)

    唇侧为La(labial S.)近中面为M(medial S.),远中面为D(distal S.)等。


=======================================================================================

Tooth Preparation Walls
---------------------------
Internal Wall. An internal wall is a prepared (cut) surface that does not extend to the external tooth
surface (Fig. 6-10).

Axial Wall. An axial wall is an internal wall parallel
with the long axis of the tooth (see Fig. 6-10).

Pulpal Wall. A pulpal wall is an internal wall that
is perpendicular to the long axis of the tooth and
occlusal of the pulp (see Figs. 6-10 and 6-13 [p]).

External Wall. An external wall is a prepared (cut)
surface that extends to the external tooth surface. Such
a wall takes the name of the tooth surface (or aspect)
that the wall is toward (see Fig. 6-10).

Floor (or Seat). A floor (or seat) is a prepared (cut) wall that is reasonably flat and perpendicular to the
occlusal forces that are directed occlusogingivally (generally parallel to the long axis of the tooth).
Examples are the pulpal and gingival walls (see Fig. 6-10).
Such floors may be purposefully prepared to provide
stabilizing seats for the restoration, distributing the
stresses in the tooth structure, rather than concentrating
them. This preparation increases the resistance form (see
later) of the restored tooth against postrestorative fracture.
More regarding this type of resistance form is
presented in a later section.

Enamel Wall. The enamel wall is that portion of
a prepared external wall consisting of enamel (see
Fig. 6-2D).

Dentinal Wall. The dentinal wall is that portion of
a prepared external wall consisting of dentin, in which
mechanical retention features may be located (see
Fig. 6-2D).


龋洞分类 - G.V.Black Cavity classification 分类 - godsonx - NDEB Board Busters
 
龋洞分类 - G.V.Black Cavity classification 分类 - godsonx - NDEB Board Busters
 
龋洞分类 - G.V.Black Cavity classification 分类 - godsonx - NDEB Board Busters



==================================================================================================



洞形设计
--------------

外形设计

窝洞外形的范围应包括所有病变组织和可疑的点隙裂沟,外形应作预防性扩展,邻面侧壁应扩展到接触点以外的自洁区,龈壁应置于平齐眼乳突边缘健康的牙休组织上。窝洞外形线应为圆缓曲线,以减少应力集中。



抗力形设计
-----------
抗力形是使充填体和余留牙能够承受咬合力而不会破裂的特定形状。Ⅰ、Ⅱ类洞对抗力形要求较高,V类洞要求可稍低。
1、洞形深度:窝洞底必须建立在牙本质上,后牙洞深应达釉牙本质界下0.2---0.5mm,前牙应达釉牙本质界的牙本质面。
2、盒状洞形:窝洞应制备成盒状,即除特殊情况外,要洞底平,侧壁平直与洞底相垂直,各侧壁之间相互平行。洞底各点线角应明确而圆钝,使应力不集中,要力均匀分布。
3、梯阶形成:复面洞的洞底应形成梯阶以均匀分担咬合力,其中龈壁与髓壁平行,轴壁与近、远中侧壁平行,各壁交接呈直角,点、线角圆钝。注意龈壁一定要与轴壁垂直,切勿形成向龈方的斜面。
4、无基釉、脆弱牙体处理:窝洞釉质壁应与釉柱排列方向平行,洞口不能留有无基釉;对脆弱的牙尖牙嵴,应适当降低高度,减轻要力负担。



固位形设计
-----------
固位形是使充填体能保留于洞内,承受更力后不移位、不脱落的特定形状。当充填材料与牙体组织无粘结力时,充填体的固位主要靠密合的摩擦力和一定的机械样合力。
1、侧壁固位:相互平行且具有一定深度的侧壁,可使充填体通过和洞壁的密合摩擦而达固位目的。
2、倒凹固位:单面洞可以在牙尖下制备倒凹增强固位,制备倒凹时要防止伤及髓角,因此洞底深度超过釉牙本质界0.5mm以上,应先垫底再制倒凹,较深的洞可以不制倒凹,使用粘结性强的修复材料时也可不制倒凹。
3、 鸠尾固位:鸠尾固位用于复面洞的固位,它借助鸠尾峡部的锁扣作用,防止充填体水平方向的脱出。鸠尾峡必须有一定的深度和宽度,宽度在后牙一般为颊舌牙尖间距的1/3。位置应在洞底轴髓线角的靠中线侧。鸠尾的宽度必须大于鸠尾峡。
4、 梯形固位:也是复面洞采用的固位形,邻雯面洞的邻面设计为龈方大于雯方的梯形,防止充填体呈垂直方向脱出。梯形的外形应作预防性扩展,梯形深度应达釉牙本质界下0.2一0.5mm。




便利形设计
-------------
在维护外形的基础上,在需要的地方略加修整,便于器械和充填物能够达到窝洞的任何部位。要达此目的,可选用适当器械,对洞形作适当延伸;当洞外形位于不健康牙龈处时,可用分离器或木楔分离牙龈,必要时切除部分牙龈。





-----------------------------------------------------

预备步骤

窝洞预备的基本步骤
1、开扩洞口或寻人口:病变部位较隐蔽的龋洞,应首先开扩洞口或寻人口,使龋洞充分暴露或为手术操作形成通路,便于观察和进行操作。可用裂钻或球钻去除洞缘的无基釉质,依病变范围开扩,或用裂钻从龋洞一侧作沟,以形成手术通路。
2、去除腐质:病变范围较大时,应先去除腐质。可先用挖匙除去洞内食物残渣和大部分腐质,然后用球钻将洞缘周围腐质除尽,最后除尽洞底腐质。洞底近髓腔处的少量软化牙本质的去留,应视实际情况而定。
3、设计并制备洞形:窝洞的洞缘线构成窝洞外形。虽然各类窝洞都有基本的外形要求,但洞形的制备还应兼顾病变破坏的范围。腐质除尽后,应依病变范围设计窝洞外形。窝洞应包括所有的病变部位,其颊(唇)、舌壁应达自洁区。窝洞的形态应符合固位形和抗力形的基本原则。制备过程中不可过多磨除健康的牙体组织。
4、修整洞形、清洗窝洞:完成洞形制备后,应去除洞内牙本质碎屑,仔细检查窝洞各部是否腐质已除尽,抗力形、固位形是否符合要求。不符合要求时应进一步去除腐质、修改洞形至达到要求。最后修整洞缘釉质,使与釉柱排列方向一致,并彻底清洗窝洞,除去所有碎屑。
5、窝洞消毒:窝洞预备后洞内牙本质小管中不可避免地会有少量细菌残留,理想的消毒药物,既可杀灭小管中的细菌,又不致损伤牙髓,对窝洞的消毒无疑有益。但目前所用的消毒药物尚不能达到上述要求。因此,除尽腐质远比消毒窝洞重要。除尽腐质即可除去绝大部分细菌,即使有少量细菌残留,由于充填修复后的环境不利细菌生长,经一定时间后也会逐渐丧失活动能力或死亡。
I类洞的制备
I类洞多为单面洞,但当龋损波及颊、舌侧面时,应制成复面洞。单面洞应底平、壁直,窝洞深度达釉牙本质界处。较深的龋损不必要求窝洞底平整,在去尽腐质后可借助垫底形成平底。复面洞时,颊面或舌面窝洞的龈壁应与牙长轴垂直,其近远中和颊舌宽度均不小于1.5mm。近、远中壁相互平行并垂直于龈壁,轴壁与龈壁垂直。要面鸠尾固位形的洞形要求同单面洞。鸠尾峡的宽度不小于1.5mm,用高速气涡轮牙钻(裂钻)沿颊沟或舌沟向更面中央窝沟或远中窝沟扩展形成鸠尾形。洞底髓壁与轴壁垂直,形成梯阶。
Ⅱ类洞的制备
Ⅱ类洞依病变破坏范围可制备单面洞或复面洞。当病变已累及接触区时,应制备复面洞;若病变未累及接触区,为避免过多磨除健康的牙齿组织,可从邻面制备单面洞;如果从邻面操作极为困难,也可制成复面洞,从更面进行操作。Ⅱ类洞多数情况下需制备成复面洞。
邻面部分制备:用裂钻从舌面边缘蜻处开扩洞口,钻轴与更面垂直,洞口的大小与邻面破坏范围一致。将邻面洞制备成盒状洞形,龈壁与轴壁垂直,宽度不超过2mm。颊舌壁位于自洁区并在要方略靠拢,使龈方颊舌壁间距略大于雯方。
Ⅲ类洞的制备
视病变范围的大小和邻面的存在与否可备成单面洞或复面洞。
1、单面洞的制备:病变范围较小,龋洞的颊、舌壁有一定厚度且同时伴有龋损侧邻牙缺失,可制备单面洞。
1.1 用倒锥钻从邻面去除龋损腐质。
1.2 按单面洞制备方法将窝洞制备成与患牙邻面外形相一致的三角形,洞底与牙面形态一致呈凸形,深度达釉牙本质界即可。
1.3 可在唇轴舌点角处制作倒凹,倒凹位于釉牙本质界下约0.5毫米处的牙本质中。
2、复面洞的制备:若前牙邻面龋损破坏范围大,或龋损侧邻牙存在,无备洞操作空间,须制备复面洞。
2.1 视龋损破坏范围及方向确定从舌侧或唇侧扩大洞口,如唇侧未遭破坏则尽量从舌侧人口。
2.2 用裂钻从舌面边缘峰处开扩洞口,洞口的切龈向宽度应与邻面破坏范围一致。邻面洞形与单面洞相同。
2.3 用裂钻从邻面约lmm深处向舌侧窝扩展形成鸠尾形,裂钻的长轴应与舌面垂直。舌面窝洞的洞形与I类洞相同。鸠尾一般不过中线,其切龈宽度约为2.5mm。切牙的鸠尾应不损伤切嵴、对侧的边缘嵴和舌隆突;由于切牙的唇舌径较小,制作鸠尾固位形时,不可加深窝洞,以免降低牙齿的抗力和意外穿髓。舌面洞底(髓壁)与邻面洞底(轴壁)互相垂直并形成梯阶。
IV类洞的制备
因受银汞合金充填材料性能所限,目前一般不用银汞合金修复IV类洞而改用复合树脂类修复材料。
V类洞的制备
1、用小号倒锥钻从唇、颊侧备洞,钻针应垂直于牙面,深度约达釉牙本质界处的牙本质中。
2、洞外形呈肾形,洞底呈凸面,与牙面平行。
3、龈壁与洞底垂直,可在轴龈线角或轴妥线角处作倒凹以增进固位。

作者  | 2010-3-13 18:15:18 | 阅读(2807) |评论(0) | 阅读全文>>

VALIDATING X12: What Are Invalid EDI X12 Files?

2015-5-17 1:00:28 阅读21 评论0 172015/05 May17

What Are Invalid EDI X12 Files?

Once you open EDI file in some text editor like Notepad, it looks cryptic. However all valid EDI X12 files have same properties:


1. They all start with three letters: “ISA”

2. After 106 characters there is word “GS”. Sometimes “GS” is on the second line. If “GS” is on the second line then there might
be 108 characters between “ISA” and “GS” (there are two non-printable carriage return and line feed characters between
lines). There are also few exceptions to this rule. Example: if your segment separator is carriage return then you have 105
characters in ISA and one non-printable carriage return character at the end of line with GS following it.

3. ISA segment is 106 characters long and sometimes longer. Even 108 characters if you have ~ tilde segment separator and
carriage return and line feed characters at the end of segment (after the tilde).


Most translators read and break down EDI files using these two points above. Most common scenarios why translator might not be able
to process the file:

1. That is not an EDI X12 file. Period. It is flat file, XML or scanned print image form or something else but EDI file.

2. If you copy and paste EDI file from Internet Browser window in most cases resulting EDI file will not be valid anymore. This is
due to how spaces are displayed in the Internet Browsers. Instead of 103 characters between ISA and GS you might end up
having much less.

3. Usually EDI files are sent over secure connections using encryption/decryption communications. Sometimes not just
communications but EDI files are encrypted themselves. Encryption leaves ISA/GS part valid but all segments in the file
unreadable. Unless EDI file is decrypted translator will not be able to read it correctly.

4. Some EDI files come from mainframe computer systems. Occasionally they are formatted into columns of 80 characters long.
Extra carriage return and line feed characters break segments into multiple lines making EDI file invalid. Those files can not be
processed by some translators but Etasoft Extreme Translator can process them.

5. Rarely EDI software communication packages combine multiple EDI messages of various types into one file. There are two
variations of this combination:

a) Example: 810 invoices and 997 acknowledgements with the same separators in one file. This is valid EDI file however output of
translator might not look right. Example: in translations from EDI to flat files translator will try to flatten EDI loops and encounter
few loops repeating independent of each other (as per example above: 810 invoices will repeat separately from 997 loops). It is
like trying to combine two spreadsheets that have no common fields; at the end combined spreadsheet will have mix of lines
 that do not tie up.

b) Example: 810 invoices and 997 acknowledgements with the different separators in one file. This is not possible to process by
many translators. Usually translators detect separators at the start of the EDI file. If separators change somewhere in the middle
of the file, translator will continue processing the file using old separators found at the file start. Scenario when various EDI
messages are mixed in one file with different separators is very rare but we mention it here to complete possible list of files that
can not be processed.

作者  | 2015-5-17 1:00:28 | 阅读(21) |评论(0) | 阅读全文>>

EDI(Electronic Data Interchange,电子数据交换)

2015-5-17 0:33:53 阅读41 评论0 172015/05 May17

EDI(Electronic Data Interchange,电子数据交换)

 
EDI的定义
  EDI(Electronic Data Interchange)是一种利用计算机进行商务处理的方式。在基于互联网的电子商务普及应用之前,曾是一种主要的电子商务模式。

  EDI是将贸易、运输、保险、银行和海关等行业的信息,用一种国际公认的标准格式,形成结构化的事务处理的报文数据格式,通过计算机通信网络,使各有关部门、公司与企业之间进行数据交换与处理,并完成以贸易为中心的全部业务过程。EDI包括买卖双方数据交换、企业内部数据交换等。


EDI的发展
  实际上,EDI的发展已经至少经历了20多年,其发展和演变的过程已经充分显示了商业领域对其重视的程度。人们将EDI称为"无纸贸易"(Paperless Trade),将EFT(电子转帐)称为"无纸付款"(Paperless Payment)已经足以看出EDI对商业运作的影响。

  如果追溯EDI的历史,EDI最初是来自于EBDI(Electronic Business Document Exchange,译为电子商业单据交换)。其最基本的商业意义就在于由计算机自动生成商业单据,例如订单、发票等,然后直接通过电信网络传输给商业伙伴的计算机里。这里的商业伙伴指的广义上的商业伙伴,它包括任何的公司、政府机构、其他商业或非商业的机构,只要这些机构与你的企业保持经常性的带有结构性的数据的交换。EDI使用者从此项应用所得到的好处包括:节省时间、节省费用、减少错误;减少库存、改善现金流动,以及获取多方面的营销优势等。

  由于实施EDI的最基本目的就是用通过第三方服务方的增值服务,用电子数据交换代替商业纸单证的交换,而纸面单证的电子交换是建立标准化信息基础上的,因此EDI的历史实际上就是商业数据的标准化和增值网络服务商的发展过程。

  当然,计算机之间进行电子信息传输有许多标准,特别是在不同系统的计算机之间的信息交换更是需要有很强的标准。如果我们排除操作系统、程序语言和其他一些硬件标准,EDI至少涉及如下两方面的标准问题:

  (1)数据标准(Data),指的是数据的格式和内容,这也是EDI的具体标准;

  (2)协议标准(Protocol),指的是一台电脑与另一台电脑之间对话所遵循的规则。

  在EDI的发展历史中,真正推进EDI发展的是那些独立的EDI网络增值服务商。特别是20世纪80年代以来,西方各国电信政策是逐步放宽,私营网络增值服务商的出现,使EDI走向了商业化发展的前沿。

  1988年三月之前,按照当时的法规,美国和英国的网络服务商不能只经营数据的单独传输业务,当时所规定的最基本的原则就是任何网络服务商所提供的网络服务必须要包含增值(Value-added)的服务部分。这意味着作为第三方的网络服务提供商,可以租赁线路从事网络服务业务,但是不能提供数据的传输业务。它们必须从事与数据本身或者信息相关的服务,也就是当数据或信息的接收者收到信息时,该数据或信息要比信息发出者发出数据或信息时具有更大价值。当然,对于增值的概念也有许多存在争论的地方,但是,这些法规毕竟对EDI的增值服务商提出了更高的要求,促使EDI服务商在寻求更广泛的增值服务。也就是从这开始,网络服务商所提供的服务也被称为VANs(Value-added Networks,译为增值服务网络)。

  网络服务商除了对数据提供增值服务外,一般都"拥有"并经营该网络,例如提供邮件储存服务、协议转换服务、数据翻译服务等都属于增值服务。

  英国政府为了简化管理规范,也将通过电信网络提供数据服务的网络提供商称为VADS(Value-added Data Service)。VADS所提供的服务除了EDI之外,还可能包括闭路电信系统 (Videotex)、数据库、电子邮件、公告栏和客户信息服务、协议转换、文件传输、文字处理转换、软件分拨、X.400报文服务、X.500目录服务 。

  许多增值网络服务商将EDI纳入其服务领域,主要归结为以下几个因素:

  (1)电信增值服务的范围越来越广泛导致了全球电信管制的放松和电信垄断局面的被打破。到了20世纪80年代末期,英国就700多家网络服务商拿到了经营的许可证。

  (2)全球网络互联和系统集成的普及,使不同应用系统和不同网络之间的互联为网络服务商提供了全新的和无限的服务空间。

  (3)传输协议的标准化,特别是开放的系统互联标准(OSI,Open System Interconnection)为一般网络的不同应用系统之间的信息交换提供了可能。

  (4)新的信息技术的到来,如,新兴网络技术,可以进行多层次协议转换和多种的接入方式等,也使得EDI的应用在技术上的阻力越来越小。

  (5)全球标准的日益规范和统一,例如全球产品统一编码,商业机构的贸易程序简化和规范等。

  (6)来自于商业机构的EDI意识越来越强。网络的连接和标准数据的传输可以节省时间、金钱、和空间,优化管理流程和人员结构,甚至可以最终重新配置社会资源。

  (7)商务运作的全球化,以及每周7天,每年52个星期,每天24小时的时间连续化使得企业认识到,全球运作必须突破时间和空间的局限性。全球许多行业,如银行业务,网上的证券交易系统等已经充分反映了这一趋势。

  70年代,EDI最早在商业上的应用就是开始于纸面单据及其信息的标准化,但是较早的EDI应用有很大的局限性,例如存在传输延时的问题,数据的兼容性问题。因此,当时EDI的应用基本上是局限于企业内部的数据传输。

  而实际上,EDI的应用主要是来自于两个方面:一个是大的企业想与自己的供应商和客户建立电子数据交换和联系;另一个就是有些行业已经形成了非常成熟的供应链网络,通过实施EDI改善整个行业的整体社会效率。因此,EDI系统较早应用在北美、欧洲、日本,以及澳大利亚的汽车制造行业,运输行业,和日用生活用品的批发行业等。这些行业从EDI的应用中得到了非常好的效益。例如,美国的汽车行业从EDI的应用中使每辆车节省200美元。

  然而,最初EDI的应用毕竟要克服许多障碍,例如,多企业的电脑通信问题、通信网络及其管理问题、不同的传输协议问题、软件问题,以及单据、信息传输的标准问题等。

  到了80年代后期,一些因素促使EDI取得了进一步的发展。比如电脑系统连接和集成技术的发展、全球通信协议的不断统一、特别是90年代联合国 EDIFACT标准被得到广泛的认可,国际电脑网络服务商的竞争也日益激烈。越来越多的企业需要适时的库存管理手段EDI逐步从伙伴到伙伴之间关系连接发展到适时的库存管理;从企业内部的数据传递发展到企业之间的交易和电子转帐和清算系统等。


EDI的特点
  (1)EDI的使用对象是不同的组织之间,EDI传输的企业间的报文,是企业间信息交流的一种方式;

  (2)EDI所传送的资料是一般业务资料,如发票、订单等,而不是指一般性的通知;

  (3)EDI传输的报文是格式化的,是符合国际标准的,这是计算机能够自动处理报文的基本前提;

  (4)EDI使用的数据通信网络一般是增值网、专用网;

  (5)数据传输由收送双方的计算机系统直接传送、交换资料,不需要人工介入操作;

  (6)EDI与传真或电子邮件的区别是:传真与电子邮件,需要人工的阅读判断处理才能进入计算机系统。人工将资料重复输入计算机系统中,既浪费人力资源,也容易发生错误,而EDI不需要再将有关资料人工重复输入系统。


构成EDI系统的要素
  构成EDI系统的三个要素是:EDI软件和硬件、通信网络、数据标准化。

  一个部门或企业要实现EDI,首先必须有一套计算机数据处理系统;其次,为使本企业内部数据比较容易地转换为EDI标准格式,须采用EDI标准;另外,通信环境的优劣也是关系到EDI成败的重要因素之一。

  EDI标准是整个EDI最关键的部分,由于EDI是以实现商定的报文格式形式进行数据传输和信息交换,一次制定统一的EDI标准至关重要。EDI标准主要分为以下几个方面:基础标准、代码标准、报文标准、单证标准、管理标准、应用标准、通信标准、安全保密标准等。


EDI的功能
  1、企业流程重组和一体化管理

  EDI作为电子商务应用的典范,无论是在技术上还是在管理上,都为目前电子商务的发展奠定了基础。应用EDI可以获得两种类型的收益:第一种是直接收益,这是通过应用EDI直接带来的。使用EDI的企业很快会发现,因为不再需要大量的文字录入等办公室工作,所以节省了很多成本;第二种收益则是间接的,这些收益是潜在的,而且较前一种收益大得多,其实现也需要较长的时间。作为一种新的业务处理模式,EDI的应用会给企业带来更多改变,包括企业流程重组(BPR)和一体化管理等。

  企业流程重组源于对提高企业的业务处理效率最基本的再思考,而EDI也因此成为促进BPR强有力的工具。在EDI中,企业之间不再相互独立,而是通过一种自动业务处理的方式联系起来,并因此减少了供应商之间的多层环节,降低了企业的营销成本,提高了生产能力和经营效率。企业的经营过程大大简化,企业内部的应用系统直接同贸易伙伴的应用系统连接在一起,形成跨越企业边界的重组过程,要求企业重新在EDI条件下进行定位,进一步预示整个管理结构、系统、经营过程以及同客户、供应商之间关系的深刻变化。企业之间信息渗透程度加大,信息处理能力增强,企业模式向虚拟联盟为中心发展,这包括企业与更加广泛的合作伙伴(如供应商、分销商)之间的联盟。在这些联盟中,所有成员为共同利益而进行的信息交换和共享带来了高效率、适应性和对市场的反应能力。这种联盟模式要求更深层次的系统集成,如其中一个组织的设计活动可能会与另一个组织的生产活动紧密相连。EDI促进了企业变革,对传统孤立的企业生产经营过程和内部管理系统造成了强大冲击,进而对企业内部系统和相关技术、应用的集成带来了挑战。

  总体来说,EDI在企业中的应用会带来多方面效益,其中包括:

  2、降低与贸易事务处理相关的费用

  使用EDI可以消除传统计算机人工输入的错误,并很大程度地减少诸如分类、汇总、配套处理以及协调、邮寄等之类的手工工作。EDI也能

  够消除用于支持企业之间传递业务信息所采用的各种原材料和设备,可以节省各种原材料的物理空间。此外,将BPR和EDI结合在一起会给企业节约更多的潜在开支。

  3、提高信息交换和处理的效率

  EDI传输事务比书面报文更加准确完整,同时在传输之前还经过翻译程序的严格检查。利用EDI可以消除邮寄服务,并缩短贸易事务处理所需的时间。

  4、缩短业务循环周期

  如果接收方接收EDI订单事务能够做到快速、准确和完整,那么商品的提货、装运等就可以快速实现,这样发送方能够更快地接收到商品和单据;同时,这将导致接收方(如买方)更快地授权银行等金融机构进行付款,以及发送方(如卖方)更快地收到付款。如果企业和公司能够收到比书面发票更快的电子发票,就可以及时核对收到的发票,授权支付,并在折扣期内付款。这对贸易伙伴双方都有利,付款方因获得折扣而满意,收款方也能更早地收到款项。此外,由于缩短了发放订单和收到订单之间的日期间隔,企业可以降低库存数量。

  5、增进贸易伙伴间的联系

  虽然存在某个EDI伙伴单方面提出使用某种标准、某种贸易规程等要求,但多数情况下,贸易伙伴就如何建立EDI及何时建立EDI需要进行更为广泛的合作,并且对最终使用的应用程序达成一致的意见。贸易伙伴的合作范围包括:定义电子环境下的贸易规定;定义信息需求并指定事实上使用标准;在普通通信手段和操作界面上达成一致;建立测试规程,从测试标准到实际生产模式的标准都达成一致。采用EDI处理业务可以改善本企业和贸易伙伴之间的人际关系,扩大信息共享程度,使双方的合作得到进一步加强。而一旦EDI投入使用,贸易伙伴还需要监督它的正确性和有效性,跟踪EDI活动以保证所有的通信数据都准确无误地传输和接收,并且不断完善系统。

  6、改善企业内部的信息流程

  在EDI中,以电子形式接收的贸易事务数据不仅更加精确完善,同时数据依次通过不同的应用程序进行了处理,从而改善了数据流程。例如,接收EDI购买订单,提高了处理速度和订单录入的准确性,而接收电子发票可以使发票核对和调整处理自动化。通过传输和接收EDI标准格式的电子事务或报文,企业可以自动提取控制信息,建立一个EDI活动数据库,信息可以按照某种方式存储,并在需要时允许其他人通过预定方式随机访问。


EDI标准体系
  EDI是目前为止最为成熟和使用范围最广泛的电子商务应用系统。其根本特征在于标准的国际化,标准化是实现EDI的关键环节。早期的EDI标准,只是由贸易双方自行约定,随着使用范围的扩大,出现了行业标准和国家标准,最后形成了统一的国际标准。国际标准的出现,大大地促进了EDI的发展。随着EDI各项国际标准的推出,以及开放式EDI概念模型的趋于成熟,EDI的应用领域不仅只限于国际贸易领域,而且在行政管理、医疗、建筑、环境保护等各个领域得到了广泛应用。可见EDI的各项标准是使EDI技术得以广泛应用的重要技术支撑,EDI的标准化工作是在EDI发展进程中不可缺少的一项基础性工作。

EDI标准体系是在EDI应用领域范围内的、具有内在联系的标准组成的科学有机整体,它由若干个分体系构成,各分体系之间又存在着相互制约、相互作用、相互依赖和相互补充的内在联系。我国根据国际标准体系和我国EDI应用的实际以及未来一段时期的发展情况,制订了EDI标准体系,以《EDI系统标准化总体规范》作为总体技术文件。该规范作为我国“八五”重点科技攻关项目,是这一段时间内我国EDI标准化工作的技术指南,处于主导和支配作用。

根据该规范,EDI标准体系分基础、单证、报文、代码、通信、安全、管理应用七个部分,大致情况如下:


EDI基础标准体系
  主要由UN/EDIFACT的基础标准和开放式EDI基础标准两部分组成,是EDI的核心标准体系。其中,EDIFACT有7项基础标准,包括EDI术语、EDIFACT应用级语法规则、语法规则实施指南、报文设计指南和规则、贸易数据元目录、复合数据元目录、段目录、代码表,我国等同采用了这7项标准;开放式EDI基础标准是实现开放式EDI最重要、最基本的条件,包括业务、法律、通信、安全标准及信息技术方面的通用标准等,ISO/IEC JTC1 SC30推出《开放式EDI概念模型》和《开放式EDI参考模型》,规定了用于协调和制定现有的和未来的开放式EDI标准的总体框架,成为未来开放式EDI标准化工作的指南。随之推出的一大批功能服务标准和业务操作标准等将成为指导各个领域EDI应用的国际标准。


EDI单证标准体系
  EDI报文标准源于相关业务,而业务的过程则以单证体现。单证标准化的主要目标是统一单证中的数据元和纸面格式,内容相当广泛。其标准体系包括管理、贸易、运输、海关、银行、保险、税务、邮政等方面的单证标准。


EDI报文标准体系
   EDI报文标准是每一个具体应用数据的结构化体现,所有的数据都以报文的形式传输出去或接收进来。目前全球范围内最广泛使用的EDI报文标准是联合国的EDIFACT和北美的ANSI X12。

EDI报文标准最早主要体现于联合国标准报文(United Nations Standard Message ,简称UNSM),其1987年正式形成时只有十几个报文,而到1999年2月止,UN/EDIFACT D.99A版已包括247个报文,其中有178个联合国标准报文(UNSM)、50个草案报文(Message in Development ,简称MiD)及19个作废报文,涉及到海关、银行、保险、运输、法律、税务、统计、旅游、零售、医疗、制造业等诸多领域。最新的EDIFACT版本是D11A。

1979年,美国国家标准学会(ANSI)特许公认标准委员会(ASC)X12 为电子交换B2B开发统一的标准。最早的ANSI X12支持北美的不同行业企业的数据交换,发展到今天广泛用于全球范围的数据交换,全球有超过300,000家公司在日常业务交易使用X12的EDI标准,X12也对EDIFACT做出过贡献。

其他被广泛使用的EDI报文标准还包括:RosettaNet(计算机、消费类电子产品、半导体制造商、电信和物流行业)、VDA(德国和欧洲汽车行业)、VICS(北美的一般商品零售行业,X12的子集)、SWIFT(银行和金融机构)、EANCOM(医疗、建筑和出版,EDIFACT的子集)、Tradacoms(英国的零售业EDI领域仍然广泛使用)等。


EDI代码标准体系
  在EDI传输的数据中,除了公司名称、地址、人名和一些自由文本内容外,几乎大多数数据都以代码形式发出,为使交换各方便于理解收到信息的内容,便以代码形式把传输数据固定下来。代码标准是EDI实现过程中不可缺少的一个组成部分。EDI代码标准体系包括管理、贸易、运输、海关、银行、保险、检验等方面的代码标准。


EDI通信标准体系和通信协议
  现在最常用的EDI通信标准包括:

1. AS2:采用签名AS、加密和具有MDN(送达回执)的特点,沃尔玛最先使用,目前广泛应用于金融、制造、零售、物流等全部领域。

2. OFTP / OFTP2.0:设计用于欧洲汽车行业,现已推广到全球的零售、大型家电、制造业、政府部门、运输、保险行业和银行业等。OFTP2.0扩展了对超过500 Gb的大文件传输的支持。

3. SFTP、FTP/S、HTTP/S、AS1/AS3/AS4等。

计算机网络通信是EDI得以实现的必备条件,EDI通信标准则是顺利传输以EDI方式发送或接收的数据的基本保证。EDI通信标准体系包括ITU 的X.25、X.200/ISO 7498、X.400系列/ISO 10021、X.500系列等,其中X.400系列/ISO 10021标准是一套关于电子邮政的国际标准。虽然这套标准,ISO叫做MOTIS,ITU称为MHS,但其技术内容是兼容的,它们和EDI有着更为密切的关系。


EDI安全标准体系
  由于经EDI传输的数据会涉及商业秘密、金额、订货数量等内容,为防止数据的篡改、遗失,必须通过一系列安全保密的规范给以保证。EDI安全标准体系包括EDI安全规范、电子签名规范、电文认证规范、密钥管理规范、X.435安全服务、X.509鉴别框架体系等。为制定EDIFACT安全标准,联合国于1991年成立了UN/EDIFACT安全联合工作组,进行有关标准的制定。


EDI管理标准体系
   EDI管理标准体系主要涉及EDI标准维护的有关评审指南和规则,包括标准技术评审导则、标准报文与目录文件编制规则、目录维护规则、报文维护规则、技术评审单格式、目录及代码编制原则、EDIFACT标准版本号与发布号编制原则等。


EDI应用标准体系
  EDI应用标准体系主要指在应用过程中用到的字符集标准及其他相关标准,包括: 信息交换用七位编码字符集及其扩充方法;信息交换用汉字编码字符集;通用多八位编码字符集;信息交换用汉字编码字符集辅2集、4集等。

  EDI标准体系的框架结构并非一成不变,它将随着EDI技术的发展和EDI国际标准的不断完善而将不断地进行更新和充实。

作者  | 2015-5-17 0:33:53 | 阅读(41) |评论(0) | 阅读全文>>

A call to PInvoke function switchToThisWindow has unbalanced the stack

2015-4-26 4:46:49 阅读20 评论0 262015/04 Apr26

A call to PInvoke function switchToThisWindow has unbalanced the stack. 

This is likely because the managed 
PInvoke signature does not match the unmanaged target signature. 

Check that the calling convention and parameters of the 
PInvoke signature match the target unmanaged signature.


e.g.

正确
        [DllImport("user32.dll")]
        public static extern void SwitchToThisWindow(IntPtr hWnd, bool turnon);

错误


         [DllImport("user32.dll")]
        public static extern void SwitchToThisWindow(IntPtr hWnd);   // 漏了东西当然就不对了


作者  | 2015-4-26 4:46:49 | 阅读(20) |评论(0) | 阅读全文>>

所谓的 类class vs与 结构体 struct 的 异同? 区别?

2015-4-26 4:03:37 阅读71 评论0 262015/04 Apr26


http://zh.wikipedia.org/wiki/C%2B%2B%E7%B1%BB

总结,主要有这么几点不同:

1.struct 是值类型,class 是对象类型

2.struct 不能被继承,class 可以被继承

3.struct 默认的访问权限是public,而class 默认的访问权限是private.

4.struct总是有默认的构造函数,即使是重载默认构造函数仍然会保留。这是因为Struct的构造函数是由编译器自动生成的,但是如果重载构造函数,必需对struct中的变量全部初始化。并且Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。class在没有重载构造函数时有默认的无参数构造函数,但是一被重载些默认构造函数将被覆盖。

5.struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对所有的字段进行Copy。而class则是在堆上分配一块内存然后再执行构造函数,struct的内存并不是在new的时候分配的,而是在定义的时候分配


像类一样,结构 (struct) 是能够包含数据成员和函数成员的数据结构,但是与类不同,结构是值类型,不需要堆分配。结构类型的变量直接存储该结构的数据,而类类型的变量则存储对动态分配的对象的引用。结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型 object 继承。

结构对于具有值语义的小型的数据结构特别有用。复数、坐标系中的点或字典中的“键-值”对都是结构的典型示例。对小型数据结构而言,使用结构而不使用类会大大节省应用程序分配的内存量。例如,下面的程序创建并初始化一个含有 100 个点的数组。对于作为类实现的 Point,出现了 101 个实例对象,其中,数组需要一个,它的 100 个元素每个都需要一个。

class Point
{
public int x, y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}
}

class Test
{
static void Main() {
Point[] points = new Point[100];
for (int i = 0; i < 100; i++) points[i] = new Point(i, i);
}
}

一种替代办法是将 Point 定义为结构。

struct Point
{
public int x, y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}
}

现在,只有一个对象被实例化(即用于数组的那个对象),而 Point 实例以值的形式直接内联存储在数组中。

结构构造函数也是使用 new 运算符调用,但是这并不意味着会分配内存。与动态分配对象并返回对它的引用不同,结构构造函数直接返回结构值本身(通常是堆栈上的一个临时位置),然后根据需要复制该结构值。

对于类,两个变量可能引用同一对象,因此对一个变量进行的操作可能影响另一个变量所引用的对象。对于结构,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。例如,下面的代码段产生的输出取决于 Point 是类还是结构。

Point a = new Point(10, 10);
Point b = a;
a.x = 20;
Console.WriteLine(b.x);

如果 Point 是类,输出将是 20,因为 a 和 b 引用同一对象。如果 Point 是结构,输出将是 10,因为 a 对 b 的赋值创建了该值的一个副本,因此接下来对 a.x 的赋值不会影响 b 这一副本。

前一示例突出了结构的两个限制。首先,复制整个结构通常不如复制对象引用的效率高,因此结构的赋值和值参数传递可能比引用类型的开销更大。其次,除了 ref 和 out 参数,不可能创建对结构的引用,这样限制了结构的应用范围。

总结,主要有这么几点不同:

1.struct 是值类型,class 是对象类型

2.struct 不能被继承,class 可以被继承

3.struct 默认的访问权限是public,而class 默认的访问权限是private.

4.struct总是有默认的构造函数,即使是重载默认构造函数仍然会保留。这是因为Struct的构造函数是由编译器自动生成的,但是如果重载构造函数,必需对struct中的变量全部初始化。并且Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。class在没有重载构造函数时有默认的无参数构造函数,但是一被重载些默认构造函数将被覆盖。

5.struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对所有的字段进行Copy。而class则是在堆上分配一块内存然后再执行构造函数,struct的内存并不是在new的时候分配的,而是在定义的时候分配

==================================================================================================


class和struct语法几乎相同,但其本质却截然不同:class是引用类型,struct是值类型,也就是说在内存中存储方式有别,由此产生的一系列差异性。

class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、构造函数、索引器、事件等。在.NET中,所有的类都继承自System.Object类,是一种引用类型,也就是说,当我们new出一个类的实例时,对象保存了该实例实际数据的引用地址,而对象的值保存在托管堆中。

struct(结构)是一种值类型,用于将一组相关的信息变量组织成为一个单一的变量实体。所有的结构都继承自System.ValueType类,是一种值类型,我们可以像使用int和char一样去使用struct。struct实例分配在线程的堆栈上,它本身存储了值,而不是指向该值的指针。

了解了class和struct的本质,我们可以通过分析和实验来总结二者的区别:

(1)关于实质:class是引用类型,struct是值类型

(2)关于职能:class是行为的封装,用来表述对象,而struct是数据的封装,用来储存数据

(3)关于继承:class支持继承自类和接口;而struct只能支继承接口。struct不能从class继承,也不能作为class的基类。

(4)关于构造函数:class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。

(5)关于实例化:class要使用new关键字;而struct可以不使用new关键字,struct在声明时就进行了初始化过程,所有的成员变量均默认为0或null。

(6)关于抽象:class可以实抽象类(abstract),可以声明抽象函数;而struct不能。

(7)关于重载:class可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。

(8)关于比较:两个class的比较有Equals和==两种,即值相等和引用相同;而两个struct可以直接通过==来判断。

(9)关于销毁:class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。

(10)关于参数传递:class变量是以按址方式传递;而struct变量是以按值方式传递的。

既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必要吗?至少在以下情况下,我们应该考虑使用struct来代替class:

  1. 实现一个用于存储数据的结构时,可以考虑struct。
  2. 考虑与某些非托管代码通信的兼容性问题时,可以考虑struct。http://witmax.cn/csharp-class-vs-struct.html


C++中类class与结构体struct的异同区别

原文链接: http://blog.csdn.net/yangbo_hbzjk/article/details/7448910

结构体struct是C语言中用来封装类似于类的模块。

因为C++设计时定下的一项原则:必须完全兼容C语言,所以就允许C++下使用结构体类型了,并且在C++中的结构体类型支持成员函数。在此基础上扩展了面向对象思想,有了Class类,其实作用和原理都等同与结构体类型struct。

什么时候用struct什么时候用class呢?

如果希望成员是公用的,使用struct比较方便,如果希望部分成员私有,宜用class。建议尽量使用class来建立类,符合C++风格。

http://blog.csdn.net/swanzy/article/details/3130331

从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别: 
(一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; 
(二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。 
除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。 

不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识: 
(1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数; 
(2)都可以有一大堆public/private/protected修饰符在里边; 
(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。 
(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。 
(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。 
(6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。 
--------------------------------------------------------------- 
http://blog.csdn.net/swanzy/article/details/3130331
最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。


http://www.programmer-club.com.tw/ShowSameTitleN/csharp/1692.html

struct有支援方法,不然Int32.Parse()是什麼東西
struct 型別是一種數值型別,可以包含建構函式、常數、欄位、方法、屬性、索引子、運算子和巢狀型別 (Nested Type),結構也能實作介面。
結構不可以宣告預設的 (無參數的) 的建構函式。
不過可以使用有參數的建構函式

public struct Point 
{
   public int x, y;

   public Point(int p1, int p2) 
   {
     x = p1;
     y = p2; 
   }
}

Point point = new Point(10,10);


補充一下:
而且存取structure裡的memeber比存取class裡的member要快一點

相對2個而言

struct 全部成員為公有 public

class 成員有公有 保護 私有 
而class 因物件導向 所以用公有成員存取私有成員
但因資料封裝性質 有時也會用struct 因不想破壞物件導向特性



http://www.cnblogs.com/tangself/archive/2009/12/10/1621416.html

NET中class与struct的区别简析

在没有class的面向过程的编程时代,struct是封装数据的利器,没它不行。但自从面向对象编程以来,class横空出世,大家高呼着“万事万物皆对象”,把class含在嘴里,握在手里,基本上使用class可以替代struct的任何场合。但是各位不要忘了“存在必有其价值”,所以struct还是有其作用和优势的地方的,要知道如何恰到好处的使用,就需先彻底了解二者的区别。

 

    很多时候一提起class和struct,可能很多初学朋友看不出它们兄弟俩有啥区别,的确语法几乎相同,但其本质却截然不同:class是引用类型,struct是值类型,也就是说在内存中存储方式有别,由此产生的一系列差异性。所以只有深刻的理解内存分配的相关内容,才能更好的驾驭。

    class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、构造函数、索引器、事件等。在.NET中,所有的类都继承自System.Object类,是一种引用类型,也就是说,当我们new出一个类的实例时,对象保存了该实例实际数据的引用地址,而对象的值保存在托管堆中。

 

    struct(结构)是一种值类型,用于将一组相关的信息变量组织成为一个单一的变量实体。所有的结构都继承自System.ValueType类,是一种值类型,我们可以像使用int和char一样去使用struct。struct实例分配在线程的堆栈上,它本身存储了值,而不是指向该值的指针。

 

了解了class和struct的本质,我们可以通过分析和实验来总结二者的区别了:

(1)关于实质:class是引用类型,struct是值类型
(2)关于职能:class是行为的封装,用来表述对象,而struct是数据的封装,用来储存数据
(3)关于继承:class支持继承自类和接口;而struct只能支继承接口。struct不能从class继承,也不能作为class的基类。
(4)关于构造函数:class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。
(5)关于实例化:class要使用new关键字;而struct可以不使用new关键字,struct在声明时就进行了初始化过程,所有的成员变量均默认为0或null。
(6)关于抽象:class可以实抽象类(abstract),可以声明抽象函数;而struct不能。
(7)关于重载:class可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注意的是,struct可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。
(8)关于比较:两个class的比较有Equals和==两种,即值相等和引用相同;而两个struct可以直接通过==来判断。
(9)关于销毁:class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。
(10)关于参数传递:class变量是以按址方式传递;而struct变量是以按值方式传递的。

 

    既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必要吗?至少在以下情况下,我们应该考虑使用struct来代替class:

    实现一个用于存储数据的结构时,可以考虑struct。
    考虑与某些非托管代码通信的兼容性问题时,可以考虑struct。

所有这些是struct有一席之地的理由,当然也许还有其他的更多说法,只是我不知道罢了。


引用一个经典示例

(1)定义接口

 interface IPerson{
void GetSex();
}

(2)定义类

    public class Person
    {
        public Person()
        {
        }

        public Person(string name, int age)
        {
            _name = name;
            _age = age;
        }

        private string _name;

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

        private int _age;

        public int Age
        {
          get { return _age; }
          set { _age = value; }
        }
    }

(3)定义结构

    //可以继承自接口,不可继承类或结构
    struct Family: IPerson
    {
        public string name;
        public int age;
        public bool sex;
        public string country;
        public Person person;

        //不可以包含显式的无参构造函数和析构函数
        public Family(string name, int age,

                  bool sex, string country, Person person)
        {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.country = country;
            this.person = person;
        }

        //不可以实现protected、virtual、sealed和override成员
        public void GetSex()
        {
            if (sex)
                Console.WriteLine(person.Name + " is a boy.");
            else
                Console.WriteLine(person.Name + " is a girl.");
        }

        public void ShowPerson()
        {
            Console.WriteLine("This is {0} from {1}",

                            new Person(name, 22).Name, country);
        }

        //可以重载ToString虚方法
        public override string ToString()
        {
            return String.Format("{0} is {1}, {2} from {3}",

                person.Name, age, sex ? "Boy" : "Girl", country);
        }
    }

    本文关于 class和struct的讨论到此为止,在.NET中,关于class和struct的讨论将涉及到对引用类型和值类型的认识,并且进一步将触角伸向变量内存分配这一高级主题,所以我们有必要来了解其运行机制,把握区别和应用场合,以便在平常的系统设计中把握好对这一概念层次的内容。




作者  | 2015-4-26 4:03:37 | 阅读(71) |评论(0) | 阅读全文>>

C# 为什么死活都捕捉不到键盘操作? 怎么办

2015-4-25 15:17:31 阅读25 评论0 252015/04 Apr25

How to: Handle Keyboard Input at the Form Level

// Detect all numeric characters at the form level and consume 1,  

// 4, and 7. Note that Form.KeyPreview must be set to true for this  // event handler to be called. 

https://msdn.microsoft.com/en-us/library/ms171538(v=vs.110).aspx

作者  | 2015-4-25 15:17:31 | 阅读(25) |评论(0) | 阅读全文>>

ERROR: intellisense identifier is undefined

2015-4-19 10:33:30 阅读27 评论0 192015/04 Apr19




just f##king ignore it, ok


https://forums.unrealengine.com/showthread.php?56308-IntelliSense-identifier-quot-FGuid-quot-is-undefined

https://docs.unrealengine.com/latest/INT/Programming/Development/VisualStudioSetup/index.html

作者  | 2015-4-19 10:33:30 | 阅读(27) |评论(0) | 阅读全文>>

using System.Windows.Media; // you must do this

2015-4-12 1:29:23 阅读40 评论0 122015/04 Apr12



http://stackoverflow.com/questions/22098595/add-presentationcore-assembly-reference-in-web-project

PresentationCore is a part of WPF, which is a .NET Framework built-in feature. You should be able to add it easily for both MVC and classic ASP.NET for .NET Framework v3.5 or later.

Please note that the assembly name used by PresentationCore.dll is plain PresentationCore. Itdoes not have any prefixes (e.g. System.PresentationCore, Microsoft.PresentationCore). Perhaps this is the reason you're having trouble finding it on the Framework Assemblies list.

enter image description here

answered Feb 28 '14 at 15:36
Aoi Karasu
2,79321846

作者  | 2015-4-12 1:29:23 | 阅读(40) |评论(0) | 阅读全文>>

http://www.edaboard.com/thread273835.html


A solution: PL2303 Error Code 10 and how to solve it on Win7 64-bit

I thought it worth pasting here, since possibly many people use USB-Serial converters. I have several different types, and the PL2303 ones don't work on Win7 64-bit. Maybe they are not "genuine" PL2303 chips inside. Mine were purchased from Maplin UK.

Anyway, the root of the problem is that the most recent drivers are incompatible with some of the PL2303 USB Serial converters, and the older (working) driver cannot be found on official sites (maybe to encourage people to purchase new USB to Serial interfaces).

First step is to uninstall from Device Manager if you have already plugged in the device. The drivers that you need can be found via google; search for a file called
PL2303_Prolific_GPS_AllInOne_1013.exe (file size was 3,052,939 bytes).
Once found, double-click to install. After installing, the PL2303 USB Serial converter _may_ work on Windows 7.

If you still get an error marker against the device in Device Manager (and possibly an Error code 10 if you look at the properties of the device) then the problem is, that Windows is still loading the incorrect driver.

The trick to getting it to operate is a little convoluted but it works:
Firstly, confirm the symptom by looking at the Driver settings in the Device Manager. If the Driver Version is higher than 3.3.2.105, then Windows is picking up a more recent driver.
To solve this, you need the help of a text editor that can "Find in Files". An example is UltraEdit. Use the editor (or an alternate method) to search for all *.inf files in C:\Windows\inf that have the following text inside them "Prolific USB-to-Serial". My search found two files; one was called oem42.inf and the other was called oem43.inf. The numbers will vary.
Inspect the files in a text editor. In my case, the oem42.inf file was the culprit; it contained this text on around line 12: DriverVer=11/12/2012,3.4.42.258The oem43.inf was the result of installing the 
PL2303_Prolific_GPS_AllInOne_1013.exe software, and it had this correct text:
DriverVer=10/27/2008,3.3.2.105
So, I needed to disable the oem42.inf file because it refers to the more recent driver that doesn't work. The easiest way to disable it is to change the filename from oem42.inf to oem42_inf_backup (without the .inf suffix).
After that, plug in the USB Serial converter, and the correct .inf file will be used to install the driver. Success.


http://www.edaboard.com/thread273835.html

作者  | 2015-3-31 1:31:53 | 阅读(84) |评论(0) | 阅读全文>>

运算符 : 移位运算符 << , >>

2015-3-24 5:41:55 阅读105 评论0 242015/03 Mar24

 <<
左移运算符 (<<) 将第一个操作数向左移动第二个操作数指定的位数。第二个操作数的类型必须是 int
备注:
如果第一个操作数是 int  uint32 位数),则移位数由第二个操作数的低 5 位给出。
如果第一个操作数是 long  u ong64 位数),则移位数由第二个操作数的低 6 位给出。
第一个操作数的高序位被放弃,低序空位用 0 填充。移位操作从不导致溢出。
用户定义的类型可重载 << 运算符(请参见 operator);第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。重载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。

位左移运算将整个数按位左移若干位,左移后空出的部分0。比如:8位的byte型变量 
byte a=0x65(即二进制的01100101),将其左移3位:a<<3的结果是0x27(即二进制的00101000)。 


 >>
右移运算符 (>>) 将第一个操作数向右移动第二个操作数所指定的位数。
备注:
如果第一个操作数为 int  uint32 位数),则移位数由第二个操作数的低五位给出(第二个操作数 & 0x1f)。
如果第一个操作数为 long  ulong64 位数),则移位数由第二个操作数的低六位给出(第二个操作数 & 0x3f)。
如果第一个操作数为 int  long,则右移位是算术移位(高序空位设置为符号位)。如果第一个操作数为 uint  ulong 类型,则右移位是逻辑移位(高位填充 0)。
用户定义的类型可重载 >> 运算符;第一个操作数的类型必须为用户定义的类型,第二个操作数的类型必须为 int。有关更多信息,请参见 operator。重载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。



位右移运算将整个数按位右移若干位,右移后空出的部分填0。比如:8位的byte型变量 
Byte a=0x65(既(二进制的01100101))将其右移3位:a>>3的结果是0x0c(二进制00001100)。 
在进行位与、或、异或运算时,如果两个运算对象的类型一致,则运算结果的类型就是运算对象的类型。比如对两个int变量a和b做与运算,运算结果的类型还是int型。如果两个运算 
对象的类型不一致,则C#要对不一致的类型进行类型转换,变成一致的类型,然后进行运算。
类型转换的规则同算术运算中整型量的转换则一致。 
位运算符连接整型量而成的表达式就是位运算表达式。

https://msdn.microsoft.com/zh-cn/library/aa691377(v=vs.71).aspx

<< 和 >> 运算符用于执行移位运算。

shift-expression:(移位表达式:)
additive-expression(加法表达式)
shift-expression   <<   additive-expression(移位表达式   <<   加法表达式)
shift-expression   >>   additive-expression(移位表达式   >>   加法表达式)

对于 x << count 或 >> count 形式的运算,应用二元运算符重载决策(第 7.2.4 节)以选择特定的运算符实现。操作数转换为所选运算符的参数类型,结果的类型是该运算符的返回类型。

当声明重载移位运算符时,第一个操作数的类型必须总是包含运算符声明的类或结构,并且第二个操作数的类型必须总是 int

下面列出了预定义的移位运算符。

  • 左移位:
    int operator <<(int x, int count); uint operator <<(uint x, int count); long operator <<(long x, int count); ulong operator <<(ulong x, int count); 

<< 运算符将 x 向左位移若干个位,具体计算方法如下所述。

放弃 x 中经移位后会超出结果类型范围的那些高序位,将其余的位向左位移,将空出来的低序位均设置为零。

  • 右移位:
    int operator >>(int x, int count); uint operator >>(uint x, int count); long operator >>(long x, int count); ulong operator >>(ulong x, int count); 

>> 运算符将 x 向右位移若干个位,具体计算方法如下所述。

当 x 为 int 或 long 类型时,放弃 x 的低序位,将剩余的位向右位移,如果 x 非负,则将高序空位位置设置为零,如果 x 为负,则将其设置为 1。

当 x 为 uint 或 ulong 类型时,放弃 x 的低序位,将剩余的位向右位移,并将高序空位位置设置为零。

对于预定义运算符,位移的位数按下面这样计算:

  • 当 x 的类型为 int 或 uint 时,位移计数由 count 的低序的 5 位给出。换言之,位移计数由 count & 0x1F 计算出。
  • 当 x 的类型为 long 或 ulong 时,位移计数由 count 的低序的 6 位给出。换言之,位移计数由 count & 0x3F 计算出。

如果计算位移计数的结果为零,则移位运算符只返回 x 的值。

移位运算从不会导致溢出,并且在 checked 和 unchecked 上下文中产生的结果相同。

当 >> 运算符的左操作数为有符号的整型时,该运算符执行算术右移位,在此过程中,操作数的最有效位(符号位)的值扩展到高序空位位置。当>> 运算符的左操作数为无符号的整型时,该运算符执行逻辑右移位,在此过程中,高序空位位置总是设置为零。若要执行与由操作数类型确定的不同的移位运算,可以使用显式强制转换。例如,如果 x 是 int 类型的变量,则 unchecked((int)((uint)x >> y)) 运算执行 x 的逻辑右移位。

https://msdn.microsoft.com/zh-cn/library/aa691377(v=vs.71).aspx




http://blog.csdn.net/huwei2003/article/details/9114541

C#移位运算(左移和右移) 
 


  C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算。

  左移 (<<)

  将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
  左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。

  x<<1= x*2 
  x<<2= x*4 
  x<<3= x*8 
  x<<4= x*16

  同理, 右移即相反:

  右移 (>>) 
  将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。

  右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。

  x>>1= x/2 
  x>>2= x/4 
  x>>3= x/8 
  x>>4=x/16


 int i = 7;
 int j = 2;
 Console.WriteLine(i >> j);   //输出结果为1


  当声明重载C#移位运算符时,第一个操作数的类型必须总是包含运算符声明的类或结构,并且第二个操作数的类型必须总是 int,如:

class Program    
{        
 static void Main(string[] args)        
 {            
  ShiftClass shift1 = new ShiftClass(5, 10);            
  ShiftClass shift2 = shift1 << 2;            
  ShiftClass shift3 = shift1 >> 2;            
  Console.WriteLine("{0} << 2 结果是:{1}", shift1.valA,  shift2.valA);            
  Console.WriteLine("{0} << 2 结果是:{1}", shift1.valB,shift2.valB);            
  Console.WriteLine("{0} >> 2 结果是:{1}", shift1.valA,  shift3.valA);            
  Console.WriteLine("{0} >> 2 结果是:{1}", shift1.valB, shift3.valB);            
  Console.ReadLine();        
 }        
 public class ShiftClass        
 {           
  public int valA;           
  public int valB;            
  public ShiftClass(int valA, int valB)            
  {                
   this.valA = valA;                
   this.valB = valB;            
  }            
  public static ShiftClass operator <<(ShiftClass shift, int count)            
  {                
   int a = shift.valA << count;                
   int b = shift.valB << count;                
   return new ShiftClass(a, b);            
  }            
  public static ShiftClass operator >>(ShiftClass shift, int count)            
  {                
   int a = shift.valA >> count;                
   int b = shift.valB >> count;                
   return new ShiftClass(a, b);            
  }        
 }    
}

因为位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运方,可以采用位移的方式进行。

http://blog.csdn.net/huwei2003/article/details/9114541

作者  | 2015-3-24 5:41:55 | 阅读(105) |评论(0) | 阅读全文>>

Endianness 端序,尾序

2015-3-19 9:26:22 阅读98 评论0 192015/03 Mar19

字节顺序,又称端序尾序英语Endianness)。在计算机科学领域中,是跨越多字节的程序对象的存储规则。


在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100。且x的四个字节将被存储在存储器0x100, 0x101, 0x102, 0x103位置。[1]

而存储地址内的排列则有两个通用规则。一个多位的整数将按照其存储地址的最低或最高字节排列。如果最低有效字节最高有效字节的前面,则称小端序;反之则称大端序。在网络应用中,字节序是一个必须被考虑的因素,因为不同机器类型可能采用不同标准的字节序,所以均按照网络标准转化。

例如假设上述变量x类型为int,位于地址0x100处,它的十六进制为0x01234567,地址范围为0x100~0x103字节,其内部排列顺序依赖于机器的类型。大端法从首位开始将是:0x100: 01, 0x101: 23,..。而小端法将是:0x100: 67, 0x101: 45,..



endian”一词来源于乔纳森·斯威夫特的小说格列佛游记。小说中,小人国为水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争论,争论的双方分别被称为“大端派”和“小端派”。以下是1726年关于大小端之争历史的描述:

“我下面要告诉你的是,Lilliput和Blefuscu这两大强国在过去36个月里一直在苦战。战争开始是由于以下的原因:我们大家都认为,吃鸡蛋前,原始的方法是打破鸡蛋较大的一端,可是当今皇帝的祖父小时候吃鸡蛋,一次按古法打鸡蛋时碰巧将一个手指弄破了。因此他的父亲,当时的皇帝,就下了一道敕令,命令全体臣民吃鸡蛋时打破鸡蛋较小的一端,违令者重罚。老百姓们对这项命令极其反感。历史告诉我们,由此曾经发生过6次叛乱,其中一个皇帝送了命,另一个丢了王位。这些叛乱大多都是由Blefuscu的国王大臣们煽动起来的。叛乱平息后,流亡的人总是逃到那个帝国去寻求避难。据估计,先后几次有11000人情愿受死也不肯去打破鸡蛋较小的一端。关于这一争端,曾出版过几百本大部著作,不过大端派的书一直是受禁的,法律也规定该派任何人不得做官。”[2]

1980年,Danny Cohen,一位网络协议的早期开发者,在其著名的论文"On Holy Wars and a Plea for Peace"中,为平息一场关于字节该以什么样的顺序传送的争论,而第一次引用了该词。[3]



字节顺序[编辑]

在哪种字节顺序更合适的问题上,人们表现得非常情绪化,实际上,就像鸡蛋的问题一样,没有技术上的原因来选择字节顺序规则,因此,争论沦为关于社会政治问题的争论,只要选择了一种规则并且始终如一地坚持,其实对于哪种字节排序的选择是任意的。

对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。

对于多字节数据,如整数(32位机中一般占4字节),在不同的处理器的存放方式主要有两种,以内存中0x0A0B0C0D的存放方式为例,分别有以下几种方式:

注: 0x前缀代表十六进制。

大端序[编辑]

大端序(英:big-endian)或称大尾序

Big-Endian.svg
  • 数据以8bit为单位:
地址增长方向  →
...0x0A0x0B0x0C0x0D...

示例中,最高位字节是0x0A 存储在最低的内存地址处。下一个字节0x0B存在后面的地址处。正类似于十六进制字节从左到右的阅读顺序。

  • 数据以16bit为单位:
地址增长方向  →
...0x0A0B0x0C0D...

最高的16bit单元0x0A0B存储在低位。

小端序[编辑]

小端序(英:little-endian)或称小尾序

Little-Endian.svg
  • 数据以8bit为单位:
地址增长方向  →
...0x0D0x0C0x0B0x0A...

最低位字节是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。

  • 数据以16bit为单位:
地址增长方向  →
...0x0C0D0x0A0B...

最低的16bit单元0x0D0C存储在低位。

  • 更改地址的增长方向:

当更改地址的增长方向,使之由右至左时,表格更具有可阅读性。

←  地址增长方向
...0x0A0x0B0x0C0x0D...

最低有效位(LSB)是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。

←  地址增长方向
...0x0A0B0x0C0D...

最低的16bit单元0x0C0D存储在低位。

混合序[编辑]

混合序(英:middle-endian)具有更复杂的顺序。以PDP-11为例,0x0A0B0C0D被存储为:

  • 32bit在PDP-11的存储方式
地址增长方向  →
...0x0B0x0A0x0D0x0C...

可以看作最高的16bit位和低位以大端序存储,但16bit内部以小端存储。

处理器体系[编辑]

网络序[编辑]

网络传输一般采用大端序,也被称之为网络字节序,或网络序IP协议中定义大端序为网络字节序。

伯克利socket API定义了一组转换函数,用于16和32bit整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。

位序[编辑]

一般用于描述串行设备的传输顺序。网络协议中只有数据链路层的底端会涉及到。

小端序(先传低位)的串行协议[编辑]

大端序(先传高位)的串行协议[编辑]


作者  | 2015-3-19 9:26:22 | 阅读(98) |评论(0) | 阅读全文>>


11down voteaccepted

Visual Studio 2010:

right click on project

Menu select "Add reference..."

select tab "Browse"

select directory "C:\windows\assembly\ GAC\Microsoft.DirectX.AudioVideoPlayback

The DLL to reference is in that folder.

answered Oct 25 '10 at 13:57
Robert Harvey?
112k23181299

作者  | 2015-3-15 20:22:09 | 阅读(56) |评论(0) | 阅读全文>>

波形头损坏: 没有做这个 Stream.Position = 0;

2015-3-15 20:00:16 阅读45 评论0 152015/03 Mar15



波形头损坏:  没有做这个 Stream.Position = 0; 

作者  | 2015-3-15 20:00:16 | 阅读(45) |评论(0) | 阅读全文>>

octave for Windows8 windows 8.1

2015-3-15 4:05:36 阅读61 评论0 152015/03 Mar15

If you got any problems while running Windows 8 or libstdc++-6.dll errors, try this octave-gui.bat file and place it into your octave-3.8.0 folder (e.g. `C:/octave-3.8.0/`).

 @echo off set PATH=%CD%\bin\ start octave --force-gui -i --line-editing exit


最简单就是一行:

C:\Octave-3.6.4\bin\octave  -i --line-editing

问题解决。


记得 pwd  = present working directory.

作者  | 2015-3-15 4:05:36 | 阅读(61) |评论(0) | 阅读全文>>

No overload for method "xxxxx" takes 0 arguments 为什么

2015-3-14 19:35:47 阅读56 评论0 142015/03 Mar14



No overload for method  "xxxxx"  takes 0 arguments 为什么

就是没有给它参数呗, 忘记给它参数了.



            try
            {
                string ls_disp;
                uint lud_vol = 0;
                ls_disp = waveOutGetVolume(IntPtr.Zero, out lud_vol).ToString();
                MessageBox.Show(ls_disp, " Result: ");

            }
            catch (Exception)
            {
            }

作者  | 2015-3-14 19:35:47 | 阅读(56) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 

有道博客魔方

 
 
模块内容加载中...
 
 
 
 
 

有道博客搜索

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2015

下载LOFTER客户端

汇聚2000万达人的兴趣社区
下载即送20张免费照片冲印

注册 登录  
 加关注