我正在尝试创建电报消息类并使用他们的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;
}
但问题是当我更改课程时,电报无法调用我的网络服务。我不明白为什么!
答案 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)