我正在尝试从另一个cs文件调用一个方法。我已经创建了该方法所在的类的新实例,但是得到了这个错误:
“SteamKit2.SteamFriends”类型没有定义构造函数
任何人都可以帮助我理解为什么会这样吗?
我试图从中调用此方法的类如下
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 ];
}
}
}
}
答案 0 :(得分:1)
构造函数被定义为内部。因此只能从同一个组件访问它。可能这个构造函数只能由工厂调用? SteamFriends是否与HarvesterHandler在同一个项目中?
答案 1 :(得分:1)
看起来你正在使用SteamBot,对吗?
我不确定这一行的目的:
SteamFriends me = new SteamFriends();
Bot
实例中提供了您个人处理程序中所需的所有内容。有关SteamFriends
相关信息,请查看Bot.SteamFriends
(有关示例,请参阅SimpleUserHandler)
与您的问题相关,我可以为您提供替代方案,因为我不确定为什么GetFriendByIndex
无法正常工作而不花费更多时间来排查项目。
你可以通过这样的方式循环遍历机器人的整个朋友列表(其中最多有250个可能的朋友,如果我正确记住Valve系统的限制):
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);
}
}
答案 2 :(得分:0)
在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文件访问。
不要成为班级的对象。
FriendCount = SteamFriends.GetFriendCount(); ..
干杯!..
答案 3 :(得分:-1)
这是因为无参数构造函数的可访问性设置为内部更改:
internal SteamFriends()
到
public SteamFriends()