C# 如何在C中正确处理第三方对象(客户端)#

C# 如何在C中正确处理第三方对象(客户端)#,c#,telegram-bot,C#,Telegram Bot,我正在我的项目中使用客户端组件。不幸的是,组件 不建议使用任何Dispose()方法。 在我的项目中,我需要根据提供的令牌续订对象: public TelegramBotClient NewClient(string token) { return new TelegramBotClient(token); } 我需要处理创建的对象 NewClient(token).SendTextMessageAsync(message.Chat.Id

我正在我的项目中使用客户端组件。不幸的是,组件 不建议使用任何Dispose()方法。 在我的项目中,我需要根据提供的令牌续订对象:

public TelegramBotClient NewClient(string token)
        {
            return new TelegramBotClient(token);
        }
我需要处理创建的对象

NewClient(token).SendTextMessageAsync(message.Chat.Id, message.Text, replyMarkup: keyboard, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);

如何正确处理该对象?

如果第三方类实现了
IDisposable
接口,那么您可以使用
块创建该类的对象。这样,对象处理将由框架负责

如果该类未实现
IDisposable
,则表示该类未使用任何非托管资源,并且如果该类对象不是有意处置的,则该类的作者不会看到该类对象导致内存泄漏的任何可能性

如果您仍然希望确保第三方类对象在其使用结束后立即释放资源,则可以手动将其包装到自己的类中,实现
IDisposable

public class TextMessageClient : IDisposable
{
    bool disposed = false;
    private Telegram.Bot.TelegramBotClient client;

    public TextMessageClient()
    {
        //Write your own logic to get the token
        //Or accept the token as an argument of constructor.
        var token = Guid.NewGuid().ToString();
        client = new Telegram.Bot.TelegramBotClient(token);
    }

    public TextMessageClient(string token)
    {
        client = new Telegram.Bot.TelegramBotClient(token);
    }

    public async Task<Telegram.Bot.Types.Message> SendMessageAsync(string chatId, string message, string, IReplyMarkup keyboard, )
    {
        return await client.SendMessageAsync(chatId, message, replyMarkup: keyboard, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    // Protected implementation of Dispose pattern.
    protected virtual void Dispose(bool disposing)
    {
        if (disposed)
            return;

        if (disposing)
        {
            client = null;
        }

        disposed = true;
    }
}
public类TextMessageClient:IDisposable
{
布尔=假;
专用电报机。Bot。电报机客户端;
public TextMessageClient()
{
//编写您自己的逻辑以获取令牌
//或者接受令牌作为构造函数的参数。
var-token=Guid.NewGuid().ToString();
客户端=新的Telegram.Bot.TelegramBotClient(令牌);
}
公共TextMessageClient(字符串令牌)
{
客户端=新的Telegram.Bot.TelegramBotClient(令牌);
}
公共异步任务SendMessageAsync(字符串chatId、字符串消息、字符串、IReplyMarkup键盘)
{
return wait client.sendmagesasync(chatId、message、replyMarkup:keyboard、parseMode:Telegram.Bot.Types.Enums.parseMode.Html);
}
公共空间处置()
{
处置(真实);
总干事(本);
}
//Dispose模式的受保护实现。
受保护的虚拟void Dispose(bool disposing)
{
如果(已处置)
返回;
如果(处置)
{
client=null;
}
这是真的;
}
}
现在您可以按如下方式使用这个类

using(var messageClient = new TextMessageClient())
{
    var message = await messageClient.SendMessageAsync(<somechatid>, <somemessage>, <somerelaymarkup>);
}
使用(var messageClient=new TextMessageClient())
{
var message=wait messageClient.SendMessageAsync(,);
}

我希望这将帮助您解决问题。

客户端类在IDisposable接口中实现?不,它没有。此外,它是第三方组件。您可以创建一个实现IDisposable的包装器类。在包装类中创建第三方类实例,并确保在处理包装类时将其设置为null…请提供一个示例好吗?不用担心。。。很乐意帮助……:)