什么是插件
Gitbook 插件是扩展 Gitbook 功能的最佳方式,如果 Gitbook 没有想要的功能或者说网络上也没有现成的解决方案时,那么只剩下自食其力这条道路,让我们一起来自力更生开发插件解决问题吧!
一个最直观的例子就是,对比华为手机上的那个 HarmonyOS ,这个 OpenHarmony 不能运行微信、 QQ 这些安卓 App ,界面也没有发布会上的版本好看,滑动起来看着也不怎么流畅。
轻量依赖
而2022年建德新生儿爆款名字排名显示,“泽”字在取名时使用频率最高。
南方专业起名程序(瓷都起名网免费取名)
案例:猪你幸福游戏
宝宝起名字测试打分比较准的跟宝宝起名测名打分测试
当然
统一风格的目标很简单:让项目看起来是同一个人写出来的。
女孩取名最多的是“梓晴”,已连续5年排行榜首。
<h1>Counterh1> <p>好开心,你点我了,现在是:<span style="color: red;">@currentCountspan>p> <button class="btn btn-primary" @onclick="IncrementCount">快快点我button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; }}
↓
姓氏起名黎与刘哪个好
两汉时期取名则以尊崇圣洁文雅为风尚,同时体现豪放与进取,崇尚英武雄健。如,西汉外交家苏武、东汉光武帝刘秀、军事家班超、史学家班固。
A:放Message,即一些消息通知类;
添加Nuget包Microsoft.AspNetCore.Components.WebView.Wpf,版本看你选择的.NET版本而定。
其实,开发 SDK,尤其是在大厂开发 SDK,是个很 “坑” 的工作,我相信做过的朋友会感同身受。
方法8:加后缀
using System;using System.Collections.Generic;using System.Linq;using System.Threading;using System.Threading.Tasks; namespace WPFBlazorChat.Messages; public class Messenger : IMessenger{ public static readonly Messenger Default = new Messenger(); private readonly object registerLock = new object(); private Dictionary>? recipientsOfSubclassesAction; public void Subscribe(object recipient, Action action, ThreadOption threadOption) where TMessage : Message { lock (this.registerLock) { var messageType = typeof(TMessage); this.recipientsOfSubclassesAction ??= new Dictionary<Type, List<WeakActionAndToken>>(); List<WeakActionAndToken> list; if (!this.recipientsOfSubclassesAction.ContainsKey(messageType)) { list = new List<WeakActionAndToken>(); this.recipientsOfSubclassesAction.Add(messageType, list); } else { list = this.recipientsOfSubclassesAction[messageType]; } var item = new WeakActionAndToken { Recipient = recipient, ThreadOption = threadOption, Action = action }; list.Add(item); } } public void Unsubscribe<TMessage>(object? recipient, Action? action) where TMessage : Message { var messageType = typeof(TMessage); if (recipient == null || this.recipientsOfSubclassesAction == null || this.recipientsOfSubclassesAction.Count == 0 || !this.recipientsOfSubclassesAction.ContainsKey(messageType)) { return; } var lstActions = this.recipientsOfSubclassesAction[messageType]; for (var i = lstActions.Count - 1; i >= 0; i--) { var item = lstActions[i]; var pastAction = item.Action; if (pastAction != null && recipient == pastAction.Target && (action == null || action.Method.Name == pastAction.Method.Name)) { lstActions.Remove(item); } } } public void Publish<TMessage>(object sender, TMessage message) where TMessage : Message { var messageType = typeof(TMessage); if (this.recipientsOfSubclassesAction != null) { var listClone = this.recipientsOfSubclassesAction.Keys.Take(this.recipientsOfSubclassesAction.Count) .ToList(); foreach (var type in listClone) { List<WeakActionAndToken>? list = null; if (messageType == type || messageType.IsSubclassOf(type) || type.IsAssignableFrom(messageType)) { list = this.recipientsOfSubclassesAction[type] .Take(this.recipientsOfSubclassesAction[type].Count) .ToList(); } if (list is { Count: > 0 }) { this.SendToList(message, list); } } } } private void SendToList<TMessage>(TMessage message, IEnumerable weakActionsAndTokens) where TMessage : Message { var list = weakActionsAndTokens.ToList(); var listClone = list.Take(list.Count()).ToList(); foreach (var item in listClone) { if (item.Action is { Target: { } }) { switch (item.ThreadOption) { case ThreadOption.BackgroundThread: Task.Run(() => { item.ExecuteWithObject(message); }); break; case ThreadOption.UiThread: SynchronizationContext.Current!.Post(_ => { item.ExecuteWithObject(message); }, null); break; default: item.ExecuteWithObject(message); break; } } } }} public class WeakActionAndToken{ public object? Recipient { get; set; } public ThreadOption ThreadOption { get; set; } public Delegate? Action { get; set; } public string? Tag { get; set; } public void ExecuteWithObject<TMessage>(TMessage message) where TMessage : Message { if (this.Action is Action factAction) { factAction.Invoke(message); } }}
作者:piikee | 分类:八字起名 | 浏览:76 | 评论:0