UG8.0通过Block UI必需的资源无法得到到TaggedObject?是不是什么设置的问题

好:为什么的Object.ToString()存在吗?-c#,.net,对象object-CodeGo.net
好:为什么的Object.ToString()存在吗?
是不是更优雅利落有一个IStringable接口?
谁需要这个Type.FullName对象返回
编辑:大家一直问为什么我认为这是更优雅..
好了,这就像那不是IComperable,对象将不得不在默认情况下抛出异常或返回0。
还有不能和不应该被描述为字符串对象。对象可以有同样的回报string.Empty。Type.FullName只是一个任意的选择..
而如Console.Write(对象),我认为它应该是:写(IStringable)。
但是,如果您的WriteLine什么,但字符串(或者说其ToString就是如数字),似乎它是仅用于调试模式。
顺便说一句-我应该怎么给你呢?这样做对吗,我发布一个答案?
本文地址 :CodeGo.net/90688/
-------------------------------------------------------------------------------------------------------------------------
1. 有三个是IMHO应该不会被添加到System.Object的...
的ToString()
GetHashCode()方法
equals()方法
所有这些本来可以按照你的建议有一个接口。如果他们这样做,我想我们会好得多。那么,为什么这是一个问题?让我们只是在的ToString():
如果的ToString()预计将使用的ToString(),并显示你有不能强制执行隐性契约的结果。您的ToString()被重载,但是没有办法强迫,要如此。
随着IStringable你只需要添加到您的泛型类型constraints或从它派生的接口需要在对象上它的。
如果您在重载的ToString find()方法的好处是调试器,你应该[System.Diagnostics.DebuggerDisplayAttribute]。
至于这需要通过的String.Format() CodeGo.net,和/或了Console.Writeline将对象转换为字符串,他们可以推迟到System.Convert.ToString(对象),并检查其像'IStringable“,故障转移到该类型的否则
正如克里斯托弗埃斯特普指出,这是文化特有的。
所以我想我独自站在这里说我讨厌System.Object的和它的所有但我爱C#作为一个整体,总体来说,我觉得设计师做的非常出色。
注意:如果你打算依靠的ToString()被重载的行为,我建议你继续和定义IStringable接口。不幸的是,你必须挑选一个,如果你真的想需要它的另一个。
我的同事和我刚才在谈的话题。我认为另一个大问题的ToString()是回答这个问题:“什么是?”。它是显示文字?序列化的文本?调试文本?全部类型
拥有的Object.ToString使得像了Console.Writeline API的可能。
从设计的角度来看,首创置业的设计师认为,以提供一个实例的字符串表示表单的能力,应该对所有对象。真正的全类型并不总是有益的,但他们认为有代表性定制在根级别的能力胜过看到一个完整的类型在输出的小trouble。
真正可以了Console.Writeline没有的Object.ToString,而是做一个接口检查,并默认为全类型的,如果接口不存在。但随后该想捕捉的对象实例的字符串表示每一个API,将有这样的逻辑。render的Object.ToString的只是核心BCL中的数字,这将有导致很多重复的。
我想象它的存在这是一个疯狂方便的事情,以对所有对象,并不需要add'l克鲁夫特为什么你认为IStringable会更优雅?
它并不需要是和它返回特定文化的结果。
返回一个人类可读的字符串,它是文化敏感。例如,对于双类,它的值是零,双.. ::实例。的ToString可能会返回“0.00”或“0,00”,具体取决于当前的UI区域性。
此外,尽管它有自己的可重写的,并且经常是。
为什么要让它它是现在的方式基本上确立了每一个对象是否能够打印其值的字符串,我看不到有什么不妥。
在如此众多的情况下A“stringable”表示,该库的设计者可能认为的ToString()更简单。
嗯,所以它可以在派生类中重写可能?
随着IStringable,你将不得不做额外的检查/施放,如果你可以输出字符串格式的对象看到的。这是太上PERF的命中为这样的操作,应该是一件好事,对所有对象的99.99%,反正。
结构和对象都具有的ToString()成员以便调试。
这个最简单的例子可以看出,为Console.WriteLine接收的类型,包括对象的完整列表,还接收params object[] args。由于控制台通常是层顶的TextWriter这些也是有帮助的(书面文件和其他数据流(套接字)时。
这也是一个简单的面向对象的设计,显示您的接口不应该创建只有你能。
我想添加一对夫妇的想法,为什么.NET的System.Object类的定义都有一个toString()方法的函数,除了调试的贴子。
由于.NET公共语言(CLR)或执行支持反射,能够实例化给定的类类型的字符串表示的对象似乎是必不可少的,如果我没有记错,在CLR中的所有参考值来源于System.Object的,具有ToString()方法的类,通过反射,确保其可用性。定义和沿IStringable的线路接口,是不是强制性的或定义一个类.NET中需要时,并不能保证查询的组件,它支持的类类型后,动态地创建一个新的实例的能力。
随着越来越多的先进可用.NET函数的2.0,3.0和3.5,如泛型和LINQ,基于反射和动态的实例化,而不是.NET中的动态语言(DLR)的支持,允许的.NET脚本语言,如Ruby和Python中,能够通过一个字符串类型识别和创建一个实例似乎是一个重要的和不可缺少的函数,在所有的类定义。
总之,如果我们不能确定我们要实例化一个具体的类,我们如何能够建立吗?依托ToString()方法有返回类的类型为“人类可读”的字符串的基类的行为似乎是有道理的。
也许在.NET设计和体系结构的文章和书籍从杰弗里Ricther和唐箱的审查可能会提供有关此主题的更好的洞察力,以及。
我的新的基类:
class Object : global::System.Object
[Obsolete("Do not use ToString()", true)]
public sealed override string ToString()
return base.ToString();
[Obsolete("Do not use Equals(object)", true)]
public sealed override bool Equals(object obj)
return base.Equals(this, obj);
[Obsolete("Do not use GetHashCode()", true)]
public sealed override int GetHashCode()
return base.GetHashCode();
确实还有的具有Type.FullName退还给您,但它是即使一个空字符串或空被退回。你问为什么它的存在。这不是太容易回答,一直是备受争议的问题多年。更多的则是十年前,几个新的语言决定,这将是方便的隐式转换对象为字符串,在需要的时候,这些语言包括Perl中,PHP和JavaScript,但他们都不是彻底遵循面向对象的范式。
面向对象语言的设计者有一个更难的问题.a般来说,有三种方法获取对象的字符串表示表单:
使用多重继承,只需从继承String还有,你可以强制转换为字符串
单继承:添加ToString基类的
无论是:使转换运算符或拷贝构造函数重载的字符串
也许你会问自己,为什么你需要一个ToString或同等学历。摆在首位?正如其他人已经指出的那样:在ToString是必要的introspection(当您在一个对象的任何实例悬停您的叫法),调试器将显示出这一点。作为一个你知道,在任何非空对象,你可以安全地调用ToString,永远。没有必要投,无需转换。
它被认为是良好的编程习惯总是ToString在自己的对象从您的可持久化的属性值。重载可以帮助,如果你需要不同类型的类的代表。
更多的历史
如果你潜水深一点在历史上,我们看到Smalltalk的采取更广泛的做法。该base对象有很多,包括printString,printOn等等
小十年后,当伯特兰?梅耶写了他的里程碑式的著作面向对象的软件建设,他提出了一个相当宽的基类,GENERAL。它喜欢print,print_line和tagged_out,后者显示该对象的所有属性,但没有默认ToString。但他建议,“任何与定义的对象二垒对象派生的,可扩展”,这似乎是一个原型方法,我们现在知道从JavaScript。
在C ++中,只有多重继承的语言中仍存在着祖先的所有类。这可能是最好的候选语言运用自己的方法,即使用IStringable。但是C ++有其他的方法:你可以转换运算符和拷贝构造函数重载来stringability。在实践中,有必须明确一个到字符串(按照你的建议与IStringable)相当的C ++知道。
在Java中,我们发现的优先次亮相toString对于主流语言。不幸的是,Java有两种主要类型:对象和值类型。值类型没有一个toString方法,而不是你需要的Integer.toString或转换为对象对应。这已被证明非常多年来,但是Java(包括我)学会忍受它。
那么C#(我跳过了几个语言,不想让它太长时间),这是优先次打算作为显示语言.NET平台,但被证明是非常受欢迎的最初的怀疑之后。 C#的设计者(安德斯海斯博格等人)主要是看在C ++和Java,并试图采取两全其美。值类型依然存在,但boxing进行了介绍。这使得它可以有值类型从Object派生implicit。添加ToString到Java只是一小步,并做是为了简化从Java世界的过渡,但现在显示出其。
虽然你不直接问吧,但为什么会下面有失败?
object o =
Console.WriteLine(o.ToString());
虽然你想想看,考虑以下,这不会失败:
public static string MakeString(this object o)
{ return o == null ? "null" : o.ToString(); }
// elsewhere:
object o =
Console.WriteLine(o.MakeString());
其中提出这样的问题:会,如果语言的设计者曾想过在早期,成为团队的一分子,以防止不必要的NullPointerException异常?考虑这个糟糕的设计,其他的认为这是一个
艾菲尔,在有一类特殊的NIL这代表虚无,但仍然有所有我真希望C#或Java已经放弃空干脆,就像伯特兰?迈耶做基类的。
古典语言,如埃菲尔铁塔和Smalltalk的广泛做法已经换成一个非常狭窄的方法。 Java的仍然有很多的对象,C#中只有极少数。这当然是很好的饲养ToString在包只需保持清洁程序和可以理解的,这是virtual,你可以(而且应该!)始终覆盖它,这将使你的代码更apprehendable。
编辑:提问者编辑的问题,并提出IComparable,是可能是真实的ICloneable。这些都是非常好的话,它通常被认为是IComparable应该已经包含在Object。在使用Java线,C#有Equals和不IComparable,而是针对Java和C#没有ICloneable(Java有clone())。
您也说明它是得心应手仅用于调试。那么,考虑这个到处都需要得到的字符串版本(做作,没有内线的方法,没有任何的String.Format,但你的想法。):
CarInfo car = new CarInfo();
BikeInfo bike = new BikeInfo();
string someInfoText = "Car " +
(car is IStringable) ? ((IStringable) car).ToString() : "none") +
", Bike " +
(bike is IStringable) ? ((IStringable) bike).ToString() : "none");
与此。无论你找到更轻松,你应该选择:
CarInfo car = new CarInfo();
BikeInfo bike = new BikeInfo();
string someInfoText = "Car " + car.ToString() + ", Bike " + bike.ToString();
该语言是有关使事情更清晰,更容易。语言的许多地方(LINQ中,ToString()时,??运算符)创建为便利。这些都不是生活必需品,但肯定是我们高兴的是,我们有他们。只有当我们知道如何的好,我们还发现一个特点(或没有)的真正价值。
本文标题 :好:为什么的Object.ToString()存在吗?
本文地址 :CodeGo.net/90688/
Copyright (C) 2017 CodeGo.net只需一步,快速开始
春天-绿意盎然
秋天-金色丰收
夏天-火红夏日
秋天-秋日庭院
冬天-冬日私语
秋天-秋高气爽
秋-动漫家园
后使用快捷导航没有帐号?
NX11.0最新原创视频:
NX 最热视频教程:
NX入门学习视频:
NX 进阶实例视频:
NX 高级专题视频:
Teamcenter视频:
PLM之家合作业务:
查看: 3238|回复: 14
UG8.0通过Block UI无法得到TaggedObject?是不是什么设置的问题?
该用户从未签到主题帖子积分
中级会员, 积分 256, 距离下一级还需 244 积分
中级会员, 积分 256, 距离下一级还需 244 积分
, F# A/ w3 j2 A3 i) E# s6 {8 v% x
我的获得TaggedObject的代码就是这样的3 `) n) P. I& g2 G* F/ J
BlockStyler:ropertyList*&&bodySelectProps = bodySelect0-&GetProperties();1 E% c2 ?' v# g' {&&_, v5 `& F4 X$ w
std::vector&Open::TaggedObject *& body01 = bodySelectProps-&GetTaggedObjectVector(&SelectedObjects&);
int num = body01.size();
char str[100];
sprintf_s(str,&%d&,num);' D9 z9 w7 |, Z6 {! [* E; p
uc1601(str,1);
得到显示的值是0啊
关键是那个objects用这个方法无法得到啊,你选择完成后得到的数量为0,调试的时候,在上面两句话中就会显示有错误,什么无法计算表达式的值。现在我在想是不是8.0这个版本的Block UI Styler不太给力啊,谢谢您了!
TA的每日心情怒 12:10签到天数: 9 天[LV.3]偶尔看看II主题帖子积分
PLM之家NX|TC专家
你不要去抱怨任何东西,除了你自己的代码!
这个是选择前的,也就是taggedobjects 的个数7 E3 c& o&&L# V. l$ W
& m: F* i( o2 i/ x
! l. H9 f% B8 z) E4 E
objects.png (102.54 KB, 下载次数: 0)
NX开发选择体
20:12 上传
: e+ S&&d&&o9 h/ D0 M
) I6 U' y8 X/ W: o
这个是转换完了的,
没有问题!!. ?% R$ [/ @. M7 ~$ ?2 P( J. w- ?
bodies.png (43.34 KB, 下载次数: 0)
NX开发选择体
20:12 上传
; y( w1 x' w. d8 x# H
4 _&&f# r2 r+ x
PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。 && 欢迎联系我们--QQ
TA的每日心情怒 12:10签到天数: 9 天[LV.3]偶尔看看II主题帖子积分
PLM之家NX|TC专家
代码加上,仅供参考!
8 [! }9 d3 Y* U% A
2 a. D&&t( D" Y1 [& Q! Y
' y* E9 V9 X/ v' `0 A
& & & & std::vector&TaggedObject *& objects = this-&bodySelect0-&GetProperties()-&GetTaggedObjectVector(&SelectedObjects&);( L+ v) Q2 H; m( O% v+ |0 W
& & & & & & & & & & & & std::4 m5 v9 X7 M# u6 O, z
& & & & & & & & & & & & ss && &选择的对象的个数是:&&& objects.size() &&
& & & & & & & & & & & & theSession-&ListingWindow()-&Open();4 }+ G* i1 H) v# _/ [' l9 X
& & & & & & & & & & & & theSession-&ListingWindow()-&WriteLine(ss.str());4 Z8 S4 \" |/ s9 Z: Q9 V7 T
& & & & & & & & & & & &
& & & & & & & & & & & & char msg[133];
& & & & & & & & & & & & sprintf_s(msg,&选择的对象的个数是: %d&,(int)objects.size() );
& & & & & & & & & & & & uc1601(msg,1);
& & & & & & & & & & & & std::vector&Body *&0 {: h: o&&o, [( X) {& n0 i
& & & & & & & & & & & & for(int i = 0 ; i & objects.size() ; i ++)% d&&k" g8 V# S$ n
& & & & & & & & & & & & { " {( _7 H6 ?7 i+ j8 i
& & & & & & & & & & & & & & & & Body *body = dynamic_cast&Body *&(objects[i]);& t$ ^# u8 [3 D& z- ^
& & & & & & & & & & & & & & & & bodies.push_back(body);
& & & & & & & & & & & & }
& & & & & & & & & & & & ss.clear();* k& ^) b8 p9 q% {: V$ Q
& & & & & & & & & & & & ss.str(&&);6 @9 h2 P9 @) E, V+ a% s
& & & & & & & & & & & & ss && &转化为body类型的个数是 : & && bodies.size()&&
& & & & & & & & & & & & theSession-&ListingWindow()-&WriteLine(ss.str());
& & & & & & & & & & & & sprintf_s(msg,&转化为body类型的个数是 : %d&,(int)bodies.size());; A4 J& i" W! x' E
& & & & & & & & & & & & uc1601(msg,1);复制代码! K; Y2 ^6 f6 b. O9 O" T
1 I' d8 d1 T" L& q/ @! @8 Y) P
PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。 && 欢迎联系我们--QQ
TA的每日心情怒 12:10签到天数: 9 天[LV.3]偶尔看看II主题帖子积分
PLM之家NX|TC专家
选择的时候 也可以直接用这个 取值+ g. g5 r. |&&x! T) E% K
; C. m( `3 v: Z# }
std::vector&TaggedObject *& objects = this-&bodySelect0-&GetSelectedObjects();
PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。 && 欢迎联系我们--QQ
该用户从未签到主题帖子积分
中级会员, 积分 256, 距离下一级还需 244 积分
中级会员, 积分 256, 距离下一级还需 244 积分
您好,我不知道您用的是9.0还是8.0,我在8.0上就是按您说的做的,但是就是不能得到想要的结果,不知道是否和设置有关系。我发现8.0上所有块的类型都是UIblock,而9.0上各个块都有自己的类,比如,体选择器他的类型是BodyCollector,而在8.0中他是UIBlock。这个怎么解决,还希望您能够指导,谢谢您!
TA的每日心情无聊 17:50签到天数: 25 天[LV.4]偶尔看看III主题帖子积分
PLM之家mildcat
&&d8 ~1 s" ~( g
您好,我不知道您用的是9.0还是8.0,我在8.0上就是按您说的做的,但是就是不能得到想要的结果,不知道是否 ...
发现你对这方面可能很不了解,
5 p4 V- ]' @0 R&&x0 X
6.0以后的版本 应该都是一样的, 你查查你的代码吧
PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。 && --&--&欢迎联系我们--QQ
TA的每日心情无聊 17:50签到天数: 25 天[LV.4]偶尔看看III主题帖子积分
PLM之家mildcat
您好,我不知道您用的是9.0还是8.0,我在8.0上就是按您说的做的,但是就是不能得到想要的结果,不知道是否 ...3 K9 m+ m* e* K. u( Q* q
再不行了,你用 select object 吧, 这个控件也可以8 U% y: w% v8 J! t$ L
加个过滤就行了
PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。 && --&--&欢迎联系我们--QQ
该用户从未签到主题帖子积分
中级会员, 积分 256, 距离下一级还需 244 积分
中级会员, 积分 256, 距离下一级还需 244 积分
说实话我确实刚接触NXOpen,因此我想尽一切办法来搞明白这个东西是什么玩意,所以我特意找了一个9.0看了看,两个生成的代码是有些不太一样,而且帮助文档里面,9.0的UIBlock类下面有各个控件自己的类,而8.0就只有几个,不是所有的都有。而且我发现我这边8.0上那些选择的控件都不好使,我把UGOPEN里面的例子拿出来使用,也不好使。不知道是我的代码写的问题还是什么问题,确实困扰了好久。在此我非常感谢您的指导和解释,希望能够再次得到您的指导,谢谢!
该用户从未签到主题帖子积分
中级会员, 积分 256, 距离下一级还需 244 积分
中级会员, 积分 256, 距离下一级还需 244 积分
您好,还有我不知道UG二次开发是否和VS的版本有关系?希望您能够指导我,谢谢!
该用户从未签到主题帖子积分
中级会员, 积分 256, 距离下一级还需 244 积分
中级会员, 积分 256, 距离下一级还需 244 积分
; z3 w: P) j, d9 h& b! d2 p4 s5 ~+ ~
再不行了,你用 select object 吧, 这个控件也可以8 s6 ^# }! [' l: M9 Z0 {/ q/ M
加个过滤就行了# p&&n& _&&H) k2 C. D4 d
说实话我确实刚接触NXOpen,因此我想尽一切办法来搞明白这个东西是什么玩意,所以我特意找了一个9.0看了看,两个生成的代码是有些不太一样,而且帮助文档里面,9.0的UIBlock类下面有各个控件自己的类,而8.0就只有几个,不是所有的都有。而且我发现我这边8.0上那些选择的控件都不好使,我把UGOPEN里面的例子拿出来使用,也不好使。不知道是我的代码写的问题还是什么问题,确实困扰了好久。在此我非常感谢您的指导和解释,希望能够再次得到您的指导,谢谢!
plm之家第六批nx 二次开发培训报名接近尾声,下批培训将在2017年举行,早学早知道,再特加5名学员,预报从速!!原官方人员上课,名额有限,一次报名,不限次数参加培训!更有海量视频资料赠送,享受plm之家VIP待遇!详细了解内部开发技巧!
Powered by移动开发 | 生活茶馆儿君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
BlockStyle
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口白天’s Blog | 有花堪折直须折,莫待无花空折枝! - Part 21}

我要回帖

更多关于 得到app 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信