类型'& # 39;没有定义的构造函数
本文关键字:定义 构造函数 类型 | 更新日期: 2023-09-27 18:18:06
我试图从另一个cs文件调用方法。我已经创建了方法所在的类的新实例,但是得到这个错误:
谁能帮我理解为什么会发生这种情况?类型为"SteamKit2"。没有定义构造函数
我试图从中调用此方法的类如下
using System;
using SteamKit2;
using SteamTrade;
using System.Collections.Generic;
using SteamBot;
namespace SteamBot
{
public class HarvesterHandler : UserHandler
{
public int FriendCount = 0;
public int FriendToTrade = 0;
SteamFriends me = new SteamFriends();
public override void OnLoginCompleted()
{
FriendCount = me.GetFriendCount();
if (FriendToTrade < FriendCount)
{
Bot.SteamTrade.Trade(me.GetFriendByIndex(FriendToTrade));
Log.Info("Sending Trade Request to Friend " + FriendToTrade + " of " + FriendCount);
return;
}
while (true)
{
Log.Warn("Finished trading");
}
}
}
}
引用的类如下(在单独的cs文件中)
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SteamKit2.Internal;
namespace SteamKit2
{
public sealed partial class SteamFriends : ClientMsgHandler
{
object listLock = new object();
List<SteamID> friendList;
List<SteamID> clanList;
AccountCache cache;
internal SteamFriends()
{
friendList = new List<SteamID>();
clanList = new List<SteamID>();
cache = new AccountCache();
}
public int GetFriendCount()
{
lock ( listLock )
{
return friendList.Count;
}
}
public SteamID GetFriendByIndex( int index )
{
lock ( listLock )
{
if ( index < 0 || index >= friendList.Count )
return 0;
return friendList[ index ];
}
}
}
}
构造函数定义为内部构造函数。因此,它只能从同一个程序集访问。可能这个构造函数只打算由工厂调用?SteamFriends真的和HarvesterHandler在同一个项目吗?
看起来你正在使用SteamBot,对吗?
我不确定这句话的目的:
SteamFriends me = new SteamFriends();
您在单个处理程序中需要的一切都可以在Bot
实例中获得。有关SteamFriends
的相关信息,请参阅Bot.SteamFriends
(参见SimpleUserHandler的一些示例)
关于你的问题,我可以为你提供一个替代方案,因为我不确定为什么GetFriendByIndex
不能正常工作,而不花费更多的时间来解决这个项目。
你可以循环遍历bot的整个好友列表(游戏邦注:如果我没记错的话,这个列表最多有250个好友),方法如下:
foreach (Bot.SteamFriends.FriendsListCallback.Friend friend in callback.FriendList)
{
// Check the friend ID (Steam Profile ID - 64bit number) against what who you want to trade
if (friend.SteamID == "VALUE YOU ARE EXPECTING")
{
Bot.SteamTrade.Trade(friend);
}
}
将SteamFriends类中的所有方法设置为静态,然后使用classname从类名中访问。你一定会得到解决问题的办法。像——:
public static int GetFriendCount()
{
lock ( listLock )
{
return friendList.Count;
}
}
public static SteamID GetFriendByIndex( int index )
{
lock ( listLock )
{
if ( index < 0 || index >= friendList.Count )
return 0;
return friendList[ index ];
}
}
和从HarvesterHandler cs文件访问。不要创建类的对象。
干杯! . .
这是因为无参数构造函数的可访问性被设置为内部更改:
internal SteamFriends()
public SteamFriends()