.NET 类型扩展(Type Extension)

使用 PInvoke.net Visual Studio Extension 辅助编写 Win32 函数签名 在 .NET 程序中使用 Win32 函数并不如 C++ 中方便。因为 C# 中不能引入 C++ 中常用的头文件,于是各种方法签名、结构体定义等等都需要各种寻找。然而 PInvoke.net 帮助我们解决了这个问题。本文推荐一款 Visual Studio 插件来帮助我们更快速地插入 Win32 函数签名。 本文内容PInvoke.net使用 PInvoke.net 扩展 PInvoke.net... 阅读详情
 
如下说明是翻译: help about_types 产生的帮助信息.
译者: Edengundam(马涛)
 
.NET Type Extension
 
SHORT DESCRIPTION
在Windows PowerShell 中对.NET type system 进行扩展
 
LONG DESCRIPTION
PowerShell安装目录中的types.ps1xml文件提供了一种对.Net类型系统进行扩展的机制. 默认的情况下, PowerShell已经添加了一些对.NET类型进行了扩展的元素. 除此之外, 你可以添加一些元素来进行自己的个性化设置.
 
添加一个属性是对类型进行扩展的一种方法. 要添加一个属性 (或者以任何方式对类型进行扩展), 你必须针对该类型修改其在types.ps1xml文件中的<type>元素. 例如, 数组类型在默认情况下不包含Count这个属性, 所以PowerShell定义了一个Count的别名属性(alias property)(译者注: 这种定义是为了使PowerShell对于不同类型的对象有一种统一的名称机制). 这个别名属性引用的是叫做Length属性(译者注: 这里就是.Net的Array中, 数组长度Length), 如下面XML所示:
 
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
 
你可以使用Get-Member 命令, 取出数组中所有属性, 来验证别名属性(AliasProperty), 如下面的示例:
 
Get-Member -inputobject (1,2,3,4) -member *property*
 
命令返回如下结果:
 
TypeName: System.Object[]
 
Name              MemberType        Definition
Count             AliasProperty     Count = Length
IsFixed           SizeProperty      System.Boolean IsFixedSize {ge
IsReadOnly       Property          System.Boolean IsReadOnly {get
IsSynchronized    Property          System.Boolean IsSynchronized
Length            Property          System.Int32 Length {get;}
LongLength       Property          System.Int64 LongLength {get;}
Rank              Property          System.Int32 Rank {get;}
SyncRoot         Property          System.Object SyncRoot {get;}
 
正如你所看到, 属性中列出了Count别名属性和该属性的定义"Count = Length."
 
在types.ps1xml文件中, 你可以定义脚本属性(script property), 当执行赋值或取值时(译者注: 类似面向对象中的get和set), 该对应脚本就会被执行. 例如, types.ps1xml文件, 为.Net的DateTime对象添加了包含了一个脚本块的DataTime成员(译者注: 这里是GetScriptBlock, 此属性只能取值):
 
<Type>
<Name>System.DateTime</Name>
<Members>
<ScriptProperty>
<Name>DateTime</Name>
<GetScriptBlock>
if ($this.DisplayHint -ieq "Date")
{
"{0}" -f $this.ToLongDateString()
}
elseif ($this.DisplayHint -ieq "Time")
{
"{0}" -f  $this.ToLongTimeString()
}
else
{
"{0} {1}" -f $this.ToLongDateString(),
$this.ToLongTimeString()
}
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
 
此脚本块用于对日期进行格式化, 使得根据不同输入值的类型(只提供日期, 只提供时间, 既提供日期也提供时间), 可以产生一致的结果. 例如, 假设你声明了变量$a如下面命令:
 
[datetime]$a = "5 march 05"
 
PowerShell将会转换该值为长日期格式(译者注:输出格式根据DisplayHint决定):
 
Saturday, March 05, 2005 12:00:00 AM
 
如果你使用"March 5, 2005"来声明该变量, 你将会得到一样的结果.
 
文件types.ps1xml还可以定义属性集(property set). 属性集就是属性的集合, 这样你就可以从逻辑上将这些属性当作一个对象进行使用. 例如, PowerShell为DirectoryEntry系统类型定义了一个属性集:
 
<Type>
<Name>System.DirectoryServices.DirectoryEntry</Name>
<Members>
<MemberSet>
<Name>PsStandardMembers</Name>
<Members>
<PropertySet>
<Name>
DefaultDisplayPropertySet
</Name>
<ReferencedProperties>
<Name>
distinguishedName
</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
 
在这个 <type> 元素中, 属性集DefaultDisplayPropertySet引用了distinguishedName属性.
 
除了修改已经存在的types.ps1xml文件(译者注: 尽量不要修改PowerShell安装目录下的类型文件, 如果PowerShell升级, 可能会覆盖系统自带的文件), 你也可创建自己的types.ps1xml文件, 添加类型, 属性的定义, 甚至覆盖默认的类型和属性定义. 你可以将新的文件存放在PowerShell命令目录(译者注: 类似于PATH环境变量, PowerShell会一个一个目录的进行搜索.)中的任意一个目录. 如果你的文件定义了一个已经存在的类型或属性, 它将覆盖命令路径中较早出现的types.ps1xml中定义的重复类型或属性.
 
您还可以参考
 
需要关于Get-Member cmdlet的信息, 输入如下命令:
 
help Get-Member
 
 
简单入门:使用.NET构建扩展类 通过创建静态类和扩展方法,我们可以在不修改原始类型定义的情况下,为.NET框架中的类添加自定义行为。在使用扩展类时,我们需要正确导入相应的命名空间和类,并确保使用正确的语法来调用扩展方法。在.NET开发中,扩展类是一种强大的工具,它允许我们为现有的类型添加新的方法和功能,而无需修改原始类型的定义。通过使用扩展类,我们可以在不破坏现有代码的情况下,为.NET框架中的类添加自定义行为。我们可以在不修改现有代码的情况下,为.NET框架中的类型添加自定义的方法和功能,使代码更加灵活和可扩展。是我们要扩展的类型。 阅读详情

相关推荐

深入理解.NET属性:装饰代码,扩展功能

本文深入探讨了.NET中属性的使用与自定义,揭示了如何通过属性为类型、成员和程序集附加元数据,以及如何利用反射在运行时检索这些信息。文章详细介绍了属性的分类,包括位图属性、自定义属性和伪自定义属性,并强调了自定义属性的可扩展性。同时,本文还提供了关于AttributeUsage属性的讲解,以及如何定义和检索自定义属性的示例代码。最后,文章展望了动态代码生成的潜力,特别是使用System.Reflection.Emit命名空间中的类来在运行时创建元数据和IL。

weixin_35753431的博客 435

.Net 自定义类、常用类型的扩展方法

1.扩展方法调用,很像实例方法,就像扩展了类本身的逻辑 2.适用于:第三方的类不适合修改源码,可以通过扩展方法修改逻辑 3.当类本身的实例方法和扩展方法冲突时,会优先调用实例方法 4..NetCore中适合组件式开发 5.适合扩展一些常用类型的常用操作 6.不建议为Object、没有约束的泛型定义扩展方法,会污染基础类型

weixin_38747097的博客 311

ClaudeCode 通过 CC Switch 配置 Ollama 本地大模型

本文介绍了如何让Claude Code使用本地免费模型qwen3.5:9b而无需Anthropic API Key的方法。主要内容包括:1)安装Claude Code、CC Switch代理工具和Ollama本地模型运行时;2)配置环境变量和设置文件将请求转发到本地服务;3)详细说明了系统架构和工作原理,展示请求如何从Claude Code经CC Switch代理到Ollama本地模型。该方案通过代理拦截和转发机制,实现了使用免费开源模型替代官方API的功能。

稚枭天卓 3222

.NET中对类的扩展

概要:.NET对类的扩展包含两种方法,一种是扩展方法,一种是部分类;扩展方法:扩展方法可以使你来扩展一个已存在的类型,增加它的方法,而无需继承它或者重新编译。所以不像为对象写助手方法,扩展方法可以直接是对象自己的一部分。扩展方法是定义在静态类中的静态方法,并且必须有一个参数指向该方法附加的类型对象。一个示例,假设我们想要验证一个string是不是合法的Email地址,我们可以编写一个方法,输入为一个string并且返回true或者false。现在,使用扩展方法,我们可以如下这样做:public static

liaoxiaoli99的专栏 3188

45、概率与模糊性:粗糙事件与模糊事件概率的探索

本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。

ik67890123的博客 135

汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)

A2L文件的生成分为两章讲解:本文主要是讲模型开发,讲解如何把标定量、观测量放到链接文件中的指定位置。下一篇讲解如何使用matlab生成完整的A2L文件

认真搞搞汽车MCU 4620

.Net扩展类的研究-提高编程效率

测试项目结构://ObjectExtension.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace ConsoleA

真爱无限的优快云博客 1367

E2B Agent Runtime Sandbox 沙箱技术架构研究

本实现指南基于E2B的技术架构,提供了完整的基于Firecracker和Docker的Agent Runtime Sandbox后端服务实现方案。架构设计:参考E2B的分层架构,实现API层、管理层和虚拟化层Firecracker集成:深度集成Firecracker提供硬件级安全隔离完整功能:支持文件读写、shell执行、浏览器访问等核心功能生产就绪:提供Docker部署、监控、测试和安全配置可扩展性:设计支持水平扩展和高并发场景。

AI天才研究院 751

.NET 10 & C# 14 新特性详解:扩展成员 (Extension Members) 全面指南

自 C# 3.0 首次引入扩展方法 (Extension Methods)以来,开发者一直能够在不修改原始类型的情况下为其添加新方法。然而,这种能力长期以来仅限于方法层面。C# 14 与 .NET 10的发布标志着这一限制的突破——扩展成员 (Extension Members)应运而生。这不仅仅是语法的改进,更是语言设计哲学的一次重要演进。优势说明🎯更丰富的扩展能力支持方法、属性、索引器、运算符📝更清晰的语法extension块使意图更明确🔧更好的代码组织相关成员集中定义🚀。

2603_94941239的博客 977

SAP BTP Trial 生命周期全解析:90 天试用、30 天活跃规则、Kyma 有效期与向 Free Tier 的顺滑迁移

摘要: SAP BTP免费试用账号(trial)提供90天有效期,需每30天登录一次保持活跃状态。Kyma运行时有效期仅14天,需特别注意重建。到期后数据不可恢复,建议将关键配置脚本化并保存。若需长期使用,可迁移至无时间限制的免费层(free tier)。文章详细拆解了试用生命周期规则,包括续期、删除机制,并针对CAP开发、集成套件和Kyma等场景提供实操建议,帮助用户规避常见误区,高效利用试用资源。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 368

【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)

实现功能:代码下载地址:下载地址 1)基于深度学习的目标检测;2)基于雷达的距离估计和预测;3)多传感器感知结果融合模块。 相机感知模块解析 4. Run nodes: python3 fusion_node/main.py python3 gps_node/main.py python3 radar_node/main.py python3 2d_detection_node/main.py #(additional instructions in 2d_detection_node/README.m

踟蹰横渡口,彳亍上滩舟。 9951

BlogEngine.NET架构学习:Extension扩展实现

之前有个系列文章介绍过BlogEngine.NET,其中也有关于插件的介绍:“BlogEngine.Net架构与源代码分析系列part9:开发扩展(上)——Extension与管理上的实现”。但是随着.NET框架变化,系统也进行了多次升级,现在的版本已经有了很大变化。结合使用的2.8版本(基于.NET4.0)再来补充一下。 Extension界面 新的界面将原来的插件、主题、Widge...

dierqian1646的博客 308

Flutter:如何在Android中实现串口通信调试

本文介绍如何通过flutter_libserialport插件在Flutter中实现串口通信调试。

sg_knight的专栏 6098

C# 14 Extension 实现更简单高效的扩展

使用这种方式之后我们去做一些低版本框架的 polyfill 的时候就会更简单更高效,如果你也有针对低版本框架的类库型应用也可以尝试以下新的扩展方式来简化一些代码~~这样我们在旧版本的 .NET 框架中也可以使用新的 API 而且性能会更好一些,尤其是对于高版本框架少一层方法调用,调用堆栈少一些。,我们可以更灵活地扩展了,对于多框架的扩展方法来说可以更加简单,对于方法调用的性能来说也会更加简单,让我们来看一个简单的示例吧。从上面的反编结果可以清晰地看到新的 extension 方式就简单了很多。

farway000的博客 73

2025年前端框架全景解析:React、Vue、Angular的生态与未来之争

前端框架的竞争本质是工程哲学的分野:React的灵活、Vue的简洁、Angular的严谨,分别对应不同场景需求。

科技D人生 4844

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

.NET10之C# Extension Members深入分析

C# 14的扩展成员特性,是C#语言面向对象能力的一次重要升级,它不仅解决了传统扩展方法的诸多痛点,更开启了C#类型扩展的全新范式。通过扩展块语法,开发者可以为现有类型统一扩展方法、属性、索引器、运算符、静态成员,让代码更具内聚性、可读性和表达力,同时保持了与现有代码的完全兼容。在实际开发中,扩展成员的应用场景极其广泛,从基础的集合操作增强、领域模型无侵入扩展,到流畅API设计、DSL构建、遗留系统增强,都能发挥巨大的价值。

无风听海 473

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

静态类与类型扩展

本章讲解静态类和扩展方法两种特殊类使用方式。静态类不能实例化,通过类名直接访问成员,适用于工具方法、验证逻辑和配置管理等场景。介绍静态类的定义、特点及与普通类的区别。讲解扩展方法,可在不修改原始类代码的情况下为现有类型添加新方法,提高代码可读性和调用便利性。

weixin_42199478的博客 1260

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

.NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members

编译器会生成:public static bool get_IsEmpty<TSource>(IEnumerable<TSource> source)扩展方法:public IEnumerable<TSource> Where(Func<TSource, bool> predicate)① 实例扩展成员:extension<TSource>(IEnumerable<TSource> source)定义的是一个 extension block,目标类型是:IEnumerable<TSource>

Ntz0ef8Wc的博客 346

.NET 10 &amp;amp; C# 14 New Features 新增功能介绍-扩展成员Extension Members

C# 14 引入了对扩展成员(Extension Members)的增强支持,本质上是对传统“扩展方法”模型的一次语言级升级,使其可以定义的不再仅限于方法, 而是可以扩展更多成员形态(例如属性、运算符等)。 一、从扩展方法到扩展成员 早在 C# 3.0 中,就引入了“扩展方法(Extension M

cmdos的专栏 57

.NET(C#) 扩展方法(Extension)

.NET(C#)中扩展方法是C# 3.0/.NET 3.x 新增特性,能够实现向现有类型中“添加”方法,本文主要介绍.NET(C#)中扩展方法的声明及使用。 原文地址:.NET(C#) 扩展方法(Extension)

weixin_42098295的博客 501

探索Sikiro.Dapper.Extension:Lambda表达式扩展的Dapper新境界

探索Sikiro.Dapper.Extension:Lambda表达式扩展的Dapper新境界 项目介绍 在数据访问层的世界里,Dapper一直以其轻量级和高性能著称。然而,随着开发需求的日益复杂,Dapper的原生功能有时显得力不从心。这时,Sikiro.Dapper.Extension应运而生,它是一个基于Dapper的扩展库,通过支持Lambda表达式和链式调用,让开发者能够更加优雅和创新地...

gitblog_00386的博客 527

【.NET新特性·第12篇】C#14 重磅特性:Extension 块彻底重构扩展能力(告别静态扩展类,实战落地详解)

C#14引入extension块语法,显著增强扩展功能。新特性包括:1)支持扩展属性和静态扩展;2)语法更简洁直观;3)允许泛型和多成员扩展;4)与LINQ深度集成。相比传统扩展方法,extension块解决了仅能扩展实例方法的限制,支持private/protected修饰符,并提供更流畅的链式调用体验。典型应用场景包括字符串处理、集合操作和日期扩展等。该特性完全向后兼容,开发者可逐步迁移旧代码。extension块使C#的扩展机制成为语言的一等公民,大幅提升开发效率。

hanzhixintianxia的博客 286

.net中有趣的“扩展方法”(Extension Method)

我在看ASP.net MVC代码的时候,发现有这么一个调用: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlPara...

anw53724的博客 223

深入解析UPM Git Extension架构:Unity包管理器UI扩展的实现原理

你是否曾为Unity包管理器(UPM)中Git仓库包的管理体验感到困扰?UPM Git Extension作为一款专业的Unity包管理器UI扩展工具,通过优雅的架构设计解决了原生UPM在Git包管理方面的诸多不足。这款开源工具不仅增强了Git仓库包的安装、更新和移除功能,还提供了直观的界面操作和智能的版本管理,让Unity开发者能够更高效地管理来自GitHub、GitLab、Bitbucket等

gitblog_01071的博客 377
上一篇: Where-Object 帮助信息
下一篇: Update-TypeData 帮助信息
PowerShell
博客等级 码龄19年 103粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值