使用两种类型创建datamember

时间:2015-09-02 14:53:19

标签: c# telegram-bot

我正在尝试创建电报消息类并使用他们的Web服务。电报消息具有属性名称聊天,其可以是用户类型或群组聊天。像这样:

chat    User or GroupChat   Conversation the message belongs to — user in case of a private message, GroupChat in case of a group

如何创建两种类型的数据成员?我现在知道如何问我的问题。它对我来说有点新鲜,所以如果它如此明显,请接受我的道歉。 感谢。

更新

非常感谢你。我改变了我的消息类:

namespace bot.TelegramUpdate
{
    [DataContract]
    public class Message
    {
        [DataMember(Order = 1)]
        public int message_id;
        [DataMember(Order = 2)]
        public User from;
        [DataMember(Order = 3)]
        public int date;
        [DataMember(Order = 4)]
        public IChat chat;
    }
}

这里也是我的Ichat界面:

interface IChat
{
    int Id { get; set; }
}

class User : IChat
{
    [DataMember(Order = 1)]
    public int id { get; set; }
    [DataMember(Order = 2)]
    public string first_name;
    [DataMember(Order = 3)]
    public string last_name;
    [DataMember(Order = 4)]
    public string username;
}

class GroupChat : IChat
{
    [DataMember(Order = 1)]
    public int id { get; set; }
    [DataMember(Order = 2)]
    public string title;
}

但问题是当我更改课程时,电报无法调用我的网络服务。我不明白为什么!

4 个答案:

答案 0 :(得分:2)

你的意思是做一个设置吗?这通常是这样做的:

public enum ChatType { User = 1, GroupChat = 2 }

public class Message
{
  public ChatType Chat;
}

您还可以创建一个最终可能成为不同类型聊天对象的接口或基类。

public interface Chat
{
  // chat properties
}

public User : Chat
{
}

public GroupChat: Chat
{
}

public Processor
{
  public void Receive(Message mesage)
  {
     var user = message.Chat as User;
     if(user != null)
     // Handle user specific
  }

  public Message Send()
  {
     if(single)
       return new Message() { Chat = new User() };
     else
       return new Message() { Chat = new ChatGroup() };
  }
}

答案 1 :(得分:1)

为什么不创建两个不同类型的成员并检查哪个不是null?

您还应该阅读interfaces

using System;

public class Test
{
    interface IChat
    {
        int Id { get; set; }
    }

    class User : IChat
    {
        public int Id { get; set; }
        public string first_name;
        public string last_name;
        public string username;
    }

    class GroupChat : IChat
    {
        public int Id { get; set; }
        public string title;
    }

    class MyClass
    {
        public IChat Chat { get; set; }
    }

    public static void Main()
    {
        MyClass foo = new MyClass();
        foo.Chat = new User();

        MyClass bar = new MyClass();
        bar.Chat = new GroupChat();

        if(foo.Chat.GetType() == typeof(User))
            Console.WriteLine("foo has User");
        else
            Console.WriteLine("foo has GroupChat");

        if(bar.Chat.GetType() == typeof(User))
            Console.WriteLine("bar has User");
        else
            Console.WriteLine("bar has GroupChat");
    }
}

答案 2 :(得分:1)

让User和GroupChat都实现一个接口。像IConversationOwner这样的东西。然后您的会员类型可以是IConversationOwner

答案 3 :(得分:0)

使用Object作为Type并检查if(obj是User).. / if(obj是GroupChat)