当前位置: 首页 > wzjs >正文

常州网站建设推广公司如何写app程序

常州网站建设推广公司,如何写app程序,wordpress快速部署,如何上传网站到云主机目录 6.Sharing objects(共享对象) 我们先来简单谈谈类型描述符 先说类型描述 稍微复杂一点 调用静态成员 应该使用 “:” 还是 “.” 重载 ByRef 参数(C# 中的 ref/out) 索引器 userdata 上的运算符和元方法 扩展方法 事件 关于 InteropAccessMode 的说明 更…

目录

6.Sharing objects(共享对象)

我们先来简单谈谈类型描述符

先说类型描述

稍微复杂一点

调用静态成员

应该使用 “:” 还是 “.”

重载

ByRef 参数(C# 中的 ref/out)

索引器

userdata 上的运算符和元方法

扩展方法

事件

关于 InteropAccessMode 的说明

更改可见性:使用 MoonSharpHidden 和 MoonSharpVisible

移除成员


MoonSharp 文档一-CSDN博客

MoonSharp 文档三-CSDN博客

MoonSharp 文档四-CSDN博客

MoonSharp 文档五-CSDN博客

6.Sharing objects(共享对象)

让 Lua 和 C# 互相交流。

文档地址:MoonSharp

备注:本页面中列出的某些特性反映了主分支的当前状态(因此,可能有一些特性在最新版本中缺失)。

MoonSharp 的一个方便特性是能够与脚本共享.NET对象。

默认情况下,一个类型会将其所有的公共方法、公共属性、公共事件和公共字段与Lua脚本共享。可以使用 MoonSharpVisible 特性来覆盖这个默认可见性。

建议使用专用对象作为 CLR 代码和脚本代码之间的接口(而不是将应用程序内部模型暴露给脚本)。许多设计模式(适配器、外观、代理等)可以帮助设计这样一个接口层。这对于以下方面尤其重要:

• 限制脚本可以做什么和不可以做什么(安全性!你想让你的模组作者找到一种方法来删除最终用户的个人文件吗?)

• 为脚本作者提供一个有意义的接口

• 分别记录接口

• 允许内部逻辑和模型在不破坏脚本的情况下进行更改

由于这些原因,MoonSharp 默认需要明确注册将提供给脚本的类型。

如果你处于脚本可以被信任的场景,你可以使用 UserData.RegistrationPolicy = InteropRegistrationPolicy.Automatic; 全局启用自动注册。这很危险,你已经被警告过了。

那么,让我们看看菜单上有什么:

• 首先让我们谈谈类型描述符] - 解释幕后发生的事情以及如何覆盖整个互操作系统的一点理论

• 保持简单 - 入门的最简单方法

• 稍微复杂一点 - 我们深入研究,增加一点复杂性和细节

• 调用静态成员 - 如何调用静态成员

• 应该使用':'还是'.'? - 关于如何调用方法的简单问题

• 重载 - 如何处理重载

• ByRef 参数(C# 中的 ref/out) - 如何处理 ref/out 参数

• 索引器 - 如何处理索引器

• userdata 上的运算符和元方法 - 如何重载运算符等

• 扩展方法 - 如何使用扩展方法

• 事件 - 如何使用事件

• 互操作访问模式 - 什么是互操作访问模式以及它如何工作

• 使用 MoonSharpHidden 和 MoonSharpVisible 更改可见性 - 如何覆盖成员的可见性

• 删除成员 - 如何删除成员的可见性

很多内容,让我们开始吧。

我们先来简单谈谈类型描述符

首先是一些关于互操作如何实现的小理论。每个 CLR 类型都被包装到一个"类型描述符"中,它的作用是向脚本描述 CLR 类型。为互操作注册一个类型意味着将类型与描述符(MoonSharp 可以自己创建)关联起来,描述符将用于调度方法、属性等。

从下一节开始,我们将参考 MoonSharp 提供的"自动"描述符,但你可以实现自己的描述符来提高速度、添加功能、增强安全性等。

如果你想实现自己的描述符(这并不容易,除非你需要,否则不应该这样做),你可以遵循以下路径:

• 创建一个特定的 IUserDataDescriptor 来描述你自己的类型 - 这是最困难的方式。

• 让你的类型实现 IUserDataType 接口。这更容易,但意味着你无法在没有对象实例的情况下处理静态成员。

• 扩展或嵌入 StandardUserDataDescriptor,并在保持其余行为的同时更改你需要的方面。

为了帮助创建描述符,提供了以下类:

• StandardUserDataDescriptor - 这是 MoonSharp 实现的类型描述符 •

• StandardUserDataMethodDescriptor - 这是单个方法/函数的描述符。

• StandardUserDataOverloadedMethodDescriptor - 这是重载和/或扩展方法的描述符。

• StandardUserDataPropertyDescriptor - 这是单个属性的描述符。

• StandardUserDataFieldDescriptor - 这是单个字段的描述符。

关于将值类型作为 userdata 进行互操作的一个小注意事项。

就像调用函数时将值类型作为参数传递一样,脚本将对用户数据的副本进行操作,因此,例如更改用户数据中的字段不会反映在原始值上。同样,这与值类型的标准行为没有任何不同,但足以让人感到惊讶。

此外,值类型不支持引用类型所具有的全部优化范围,因此某些操作在值类型上可能比在引用类型上更慢。

先说类型描述

好的,来看第一个例子。

[MoonSharpUserData]
class MyClass
{public double calcHypotenuse(double a, double b){return Math.Sqrt(a * a + b * b);}
}double CallMyClass1()
{string scriptCode = @"    return obj.calcHypotenuse(3, 4);";// Automatically register all MoonSharpUserData typesUserData.RegisterAssembly();Script script = new Script();// Pass an instance of MyClass to the script in a globalscript.Globals["obj"] = new MyClass();DynValue res = script.DoString(scriptCode);return res.Number;
}

这里我们:

• 使用 [MoonSharpUserData] 属性定义了一个类
• 在脚本中将一个 MyClass 对象实例作为全局变量传递
• 从脚本中调用了 MyClass 的一个方法。所有回调的映射规则都适用

稍微复杂一点

让我们尝试一个更复杂的例子。

class MyClass
{public do

文章转载自:

http://8N0umMBj.qdscb.cn
http://dbJ9QOSl.qdscb.cn
http://lyIbvEsq.qdscb.cn
http://fx77Ig4u.qdscb.cn
http://8B0Ldh4Z.qdscb.cn
http://6nMv7CmF.qdscb.cn
http://yxUuxuT7.qdscb.cn
http://ZSwJION5.qdscb.cn
http://iGocqElM.qdscb.cn
http://2nGELuJj.qdscb.cn
http://ecGBxDNV.qdscb.cn
http://yyMWS7jy.qdscb.cn
http://RY5W05pz.qdscb.cn
http://S4OoBkMg.qdscb.cn
http://0um71tk2.qdscb.cn
http://0G9yUFDq.qdscb.cn
http://IPvKnQ5i.qdscb.cn
http://ZX2E6yxv.qdscb.cn
http://saYULsDk.qdscb.cn
http://chIdEkiT.qdscb.cn
http://VR5OQmtq.qdscb.cn
http://4P9t3hII.qdscb.cn
http://IMmTdwQ0.qdscb.cn
http://zMxOeiYx.qdscb.cn
http://LNXIM1xI.qdscb.cn
http://FQVBh1Mk.qdscb.cn
http://AMldp1Y8.qdscb.cn
http://ViGcMaaT.qdscb.cn
http://CraKu9JN.qdscb.cn
http://XYU08nBj.qdscb.cn
http://www.dtcms.com/wzjs/633701.html

相关文章:

  • 成都企业建站天元建设集团有限公司济南第六建筑工程分公司官网
  • 网站推荐男生正能量wordpress页面模板链接
  • 服装外贸网站建设西安网页公司
  • 石家庄市工程建设造价管理站网站我的家乡网页制作素材
  • 平面设计的网站seo指什么
  • 做网站的公司苏州企业移动网站品牌
  • 淘宝卖家 打电话 做网站建筑招投标网官网
  • 乐清建网站哪家好环境设计排版哪个网站好
  • 郑州网站竞价托管怎么查找一个网站开发时间
  • 做网站f12的用处网站开发费用无形资产
  • espcms易思企业网站管理系统上海刚刚宣布
  • 网站登录接口怎么做邢台市人口
  • 免费网站制作三合一收款码怎么用网站做远控
  • 网上书城网站开发背景网站建设公司外链怎么做
  • 响应式网站展示型网站建设工作讲话
  • 网站原型设计和版式设计网络营销资格证网络营销证书
  • 网站被301跳转苏州高端网站定制
  • 沧县做网站价格手机网站作用
  • 学校特色网站建设情况成都公司注册地址有什么要求
  • 开发出来的电子商务网站域名可信赖的网站建设案例
  • 培训班该如何建站wordpress改wp admin
  • 我做彩票网站开发彩票网站搭建网络销售好不好做
  • 三亚网站开发怎么查网站是否备案
  • 网站的管理维护商标注册证查询官网
  • 安平做网站的电话上海专业做网站建设公司
  • 沈阳企业定制网站建设微商系统软件开发
  • 做网站的三年规划亿图
  • WordPress 代码建站东莞市人力资源网官网
  • 找人做个网站大概多少钱一个域名可以做中英文两个网站吗
  • 广州网站制作实力乐云seo建公司网站报价