回答  何时使用(返回值)和何时使用(得到;设置;)

加入
2019年10月30日
消息
16
编程经验
Beginner
你好
我已经在Autoit中编码了十多年了,刚刚开始使用C#。

我的Q.是最佳练习,以便使用方法返回,以及何时使用Get;从方法中设置?

我的意思是:

在AutoIT中,最好的做法,以避免使用全局变量来处理方法(函数)中使用的数据,最好使用返回返回到调用函数的数据。
但是自动是单线线而不是OOP。

在C#中我有课程,可以使用get;放;对于变量,比这更好"throw"方法之间的数据?

例子:

在autoit我会做一些这样的事情。

C#:
$sData = GetData()

ConsoleWrite($sData) or just ConsoleWrite(GetData())


Func GetData()

$sReadString = FileRead("C:\Test.txt")

Return $sReadString

End Func

在C#中我可以做同样的事情,但我也可以

私有字符串数据{GET;放; }

和执行控制台.Writeline(数据);

在C#返回或获得中最好使用什么;放;

我询问的原因是我在我得到一些数据的地方有很多方法,然后将其发送到另一种处理方法,aso - 并且最后我将数据返回到我的主要方法,然后我将在其中进行结局处理数据。
目前我在90%的方法中使用返回声明。

希望我的问题很清楚  :)

干杯
/ lr.
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,161
地点
挪威
编程经验
10+
属性应该返回一部分类对象的一部分 (对象状态),以及课程可以的方法 (computed result).
 
加入
2019年10月30日
消息
16
编程经验
Beginner
你好
所以,如果我正确理解得到;放;将数据添加到类时,课程中的所有内部数据处理应使用返回?

干杯
/ lr.
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
物业的另一个警告。 C#(以及一般的.NET Framework)试图遵循最不令人惊讶的原则。因此,对于属性而言,开发人员认为获取或设置属性相对便宜。如果操作将昂贵,则更喜欢使用方法而不是Getter / Setter。例如,如果你有一些代表的物体"network connection", I would suggest using a property for IsConnected, but using a method for GetAverageLatency().
 
加入
2019年10月30日
消息
16
编程经验
Beginner
嗨抱歉迟到的回复,一些白痴与反铲拆除城市的纤维电缆,并在没有互联网和电视的情况下留下了½城市,它才拍摄纤维公司差不多一周让我们再次在线  :疯狂的:

我目前正在移植我在Autoit中开发的许可证处理,其中我来自我的主程序调用许可证处理。调用许可证处理时,它首先检查它在注册表中存在的程序许可证,如果存在许可证,它调用池中汇集来自注册表的许可证数据的方法,将该数据发送到将其解析为较小部分的函数(许可证密钥,HWID,用户名等),然后将该信息发送到另一种方法,该方法创建用于在线许可证检查的数据字符串,该数据将发送给另一个方法,将数据字符串发送到许可证服务器,然后将服务器发送到另一个处理该服务器响应的方法,如果全部检查,该方法返回True和主要功能"shutdown"并允许程序继续。
如果不存在许可证,我抛出了一个许可证GUI,其中用户可以输入许可证数据,并具有处理输入的数据的方法。

我的许可手柄中有大约12种不同的方法,谁都有"throw"使用返回之间的数据。

在C#中我有更多的方法,Corse我已经读/听到了某处,那种方法应该只做一件事,但这很好地做到这一点,所以我确实将一些自动方法分成较小的C#方法。

我理解你的答案的方式,这是做到的正确方法吗?

对不起,如果我听起来愚蠢,但据说这个OOP对我来说仍然很新,而且由于我在过去的15年里编写了途中,有点难以让我的脑袋。
干杯
/ rex.
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
劫持你的话题并不意味着 @lupusrex. 但是,在我曾经使用的另一个论坛上有一个主题,并且在这个问题上有关如何用许可证身份验证服务保护软件。我认为您应该阅读我建议确保身份验证服务的内容。我将把主要员额带入本论坛,如引用:
这是一个非常深刻的问题,可以通过这么多的方式回答,这一切都取决于你如何要将这些密钥分发以及如何限制给定用户使用某人的elses键。你认为最好是最好的吗?

如果它在哪里......我可能会设置一个可以取的Web服务器,它可以采用TCP Web请求,并让软件发出一次oppl安装键,在激活时将被链接到远程服务器密钥。如果用户1S PC上的键是活动状态,并且用户2获取用户1S CD密钥/代码,则该键将被标记为未真实状态并因此被阻止。购买关键的合法所有者/用户需要填写个人详细信息以从您的网站获取重置代码,使他们能够再次使用软件。用户1S之前的键将被阻止和禁止,如果用户1S密钥被盗2次,则应根据您的隐私,盗版服务条款禁止用户请求其他键;在购买产品时,他们也必须同意,以便在购买产品时使用您的服务。这将在大多数国家合法地覆盖。

我希望你发现这个想法有些有用,如果你希望有一些初学者代码,那么我认为这里的任何人都会免费为你这样做,但如果你有东西可以展示,如尝试或更具体的问题,作为如何确定使用TCP客户端或如何从AC#应用程序将Web调用制作到TCP服务器的正确方法,那么这可能是您可能上的信息这个。祝这些项目祝好运。
@skydiver suggested :
如果您的软件足够重要,我建议购买而不是自己滚动。倾向于需要硬件加密狗的解决方案。 (是的,它很糟糕,希望人们在VM中运行,但在那里有它。)

但是,如果你决定滚动自己,那么这里有一些很棒的建议: 在Delphi实现部分序列号验证系统 并且有一个相应的 C#港口 .

我找不到其他文章,但它有很好的讨论如何拥有"variable strength"钥匙也是如此。使用公钥加密还有另一种完全不同的方法。不幸的是,这一个在钥匙和关键一代方面非常伟大,但对于如何保护您的计划免于破解,非常建议"例如有人只是绕过你的关键检查").
虽然我继续详细说明:
如果您想滚动自己,您将最好确保您将钥匙绑定到许多因素,如上所述。

虽然这只是一层洋葱,但它也不是万无一失的,因为改变PC / OS /安装VM,也会改变你的MAC地址。如果您的用户计算机足够强大以充当虚拟机管理程序,则您运行的VM将使用自分配的MAC地址,并且可以手动管理这些VM。因此,当您将许可证密钥绑定到MAC时,如果您使用关键字的用户希望在虚拟环境中使用您的应用程序可能需要更改MAC地址(无论是什么原因),则MAC地址可能会更改。无论如何,它不会是我允许的东西。

根据IP地址考虑与其他来源(如GEO位置)的绑定。虽然某些用户使用VPN,但对于此方法也可能是其中的问题。但通过这样做,您将并可以确定用户使用您提供的一个键之一是否已泄露或丢失,并且您可以告诉键有多个GEO位置。但是,使用的因素可能会出现很多,但即便如此,每次从网卡芯片组分配时,它们都不会有不同的Mac。因此,当您从注册初始串行密钥的PC收集多个信息时,这些将是识别某些凸起键的方法。

此外,您还可以将钥匙的10位数字完全匿名到串行密钥所有者和其他任何人管理到访问其他用户密钥的人。你保持秘密的十位数将成为一个 种子 在您的服务器注册商中,因此允许被盗钥匙的合法所有者请求重置他们购买的关键。当它们重置键时,这不会重置在购买时确定的键,但它会在您的服务器上生成新的Seew键,呈现使用相同密钥的所有用户禁用您的应用程序的未经许可。您也可以(正如SkyDiver所指出的),通过加密种子为您的种子添加额外的保护层 在服务器上 然后发出验证代码返回您的申请以进行身份​​验证。如果它们匹配,则新密钥再次变为活动状态。

您还应考虑到仅关键所有者会知道的个人信息,作为注册使用密钥代码的一部分。这也将停止盗版,提供盗窃的小偷,不知道那些合适地拥有关键的用户的个人详细信息。这些方法也将允许 你个人 或者 自动机器人脚本 禁止在多台机器上使用的键。最后,您应该将很多思想与混淆软件(也不是傻瓜证明,但确实变得更难)以及其他检查,以确保不会被跳伞的指出,以确保您的关键检查不避免。
和重要的部分:
注意::当它们重置键时,这不会重置在购买时确定的键,但它会在您的服务器上生成新的Seew键,渲染使用相同密钥的所有用户禁用应用程序的未经许可版本。

如果你决定实施这个想法,我认为你应该。当您开始将个人数据绑定到已购买的密钥时,它应该与键的种子绑定而不是实际关键本身。购买时提供给用户的密钥"like"用于绑定到十个数字种子的激活器,并且绑定数据将要求它们在激活购买的密钥代码时注册他们从服务器收到的AUTH代码。因此,这是有意义的,我已经足够了解了这一点,或者我与这种阐述过于复杂吗?

好奇,如果有人有任何建议,使这个概念更好,或者如果有更好的方法来实现它?发布你的想法。

PS,您仍应绑定到MAC地址和任何其他数据。没有理由不要,特别是如果你的钥匙保护是优先权。
总结,在这些报价上,

关于你的帖子和你的问题。如果要将事件委托给您的财产,则可以使用属性。在Setter中,您可以选择添加检查以确保值在特定范围内。就应该返回一个值时,真正取决于您是否要从类中获取属性值,但继续在称为返回类型函数的当前方法中执行代码以获取该功能的值在您当前的方法中。我的意思是,我们可以通过例如示例继续执行这个问题,但它真的在一天结束时归结为逻辑,以及您的目标是实现的目标,以及如何实现执行代码运行的方式。

希望你发现这很有用。
 
Last edited:
加入
2019年10月30日
消息
16
编程经验
Beginner
嗨毛皮
我认为我已经阅读了那篇文章,也是那样的。

您真的不应该将密钥存储在用户PC上。这是非常糟糕的练习,这就是在Winforms仍然是一件事的日子里常常用来重新做的电枢DEV。随着时间的推移,美国开发人士更聪明,而且比努力遵循你推出的确切概念的人面前的那些错误的常见意义更常见。这是一个坏人。您的概念将导致许多钥匙被泄漏在黑色市场和黑暗的Web中,以便所有使用。我以上阐述的想法将帮助您以更实用和保护的方式保护您的应用程序软件。
我在本地存储许可证数据的主要原因是允许用户脱机(短时间) - 尽管每次我的程序开始它都会检查Internet连接,如果发现它会在线检查我服务器。
我允许最多3.在线检查失败,之后程序停止工作,直到它与我的许可证服务器有连接。此外,如果用户应该拥有,我也使用存储在我的服务器上的唯一硬件键"sold"许可证密钥 - 它将在3个HWID更改后被阻止,之后它需要从管理员手动重新激活。
我的本地许可证数据也使用HWID锁定到PC,并保存在非纯文本中。

干杯
/ rex.
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我在本地存储许可证数据的主要原因是允许用户脱机
你显然没有阅读我写的文章。如果你这样做,你会清楚地看到你的方法是错误的。没有理由为您存储用户计算机上的密钥。您应该提供GUID 喜欢 key 这与服务器上的实际许可证密钥相关联。这是您向用户提供激活和绑定许可证密钥的GUID。没有用户应该看到真正的许可证密钥。这样,您可以禁止来自服务器的密钥和所有相关的GUID,以及任何其他用户使用GUID(如上所述),那么每个用户都将被绑定到该键的GUID。键和GUID不一样。但如果你不能责备仔细阅读文章,我不会打算进一步解释它。

这是您在一天结束时的软件,如果您的应用程序变得病毒,则在您开始用完键之前不会很久。在这种情况下,提前思考,以便您的许可证软件附带更新程序。你需要它......我知道什么;我只是从经验中讲...
 
加入
2019年10月30日
消息
16
编程经验
Beginner
我的意思是没有冒犯,并且当我写的时候,我可能已经阅读了帖子,或者一些类似的东西,但我确实阅读了你的报价。
如果您可以发布到文章的链接,我想阅读所有内容。
但正如主帖中所述,我(试图)从Autoit到C#的代码端口,我有许可证句柄 - 是我在几年前写的,我以为我认为我非常聪明地对我来说非常聪明创造了它  :D. 如果认为我创建的第一个许可句柄只有一个包含所有发出的许可证密钥的TXT文件,那么然后将其放在我的服务器上 - 并且程序刚刚查看该文件以查看许可证是否存在。

我不是说我的方式是正确的,我只讲了为什么我这样做的方式。

我确实允许用户关闭线路的主要原因是我用来托管我的许可证服务器,一段时间不经常脱机,但它已经发生 - 因此,确保程序继续下班,直到要么服务器再次启动,或者我将我的域移到另一台服务器,程序需要函数corse那些使用它们的人,不能在没有它们的情况下完成工作。

我远离经验丰富的开发人员,我是自我想法,我每天都倾向于新的东西,并且在一些拥有更高的经历时总是幸福,与我一起股票,所以我可能成为一个更好的编码器/程序员。 (没有SAS,我的意思是真的,我喜欢从那些知道如何做到的人中学习,这就是我如何学会焊接TIG,铺设BRIG和很多其他工匠的东西。)

它写的不是否则的方式,我希望它不会被读。英语不是我的母语和某些时候,我的意思是在翻译中搞砸了  :(

干杯
/ rex.
 
加入
2019年10月30日
消息
16
编程经验
Beginner
啊,奥基  :)
当我有一段业余时间时,我会谈谈帖子。

干杯
/ rex.
 
最佳 底部