1

我正在尝试从另一个 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 ];
        }
    }
}
}
4

4 回答 4

1

构造函数被定义为内部的。因此它只能从同一个程序集中访问。可能这个构造函数只打算由工厂调用?SteamFriends 和 HarvesterHandler 真的在同一个项目中吗?

于 2013-06-13T10:37:26.297 回答
1

看起来您正在使用SteamBot,对吗?

我不确定这条线的目的:

SteamFriends me = new SteamFriends(); 

您在个人处理程序中所需的一切都在Bot实例中可用。有关SteamFriends相关信息,请查看(有关一些示例,Bot.SteamFriends请参见SimpleUserHandler )

与您的问题相关,我可以为您提供替代方案,因为我不确定为什么GetFriendByIndex不花更多时间对项目进行故障排除而无法正常工作。

您可以通过执行以下操作来遍历机器人的整个好友列表(如果我没记错 Valve 系统的限制,最多有 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);
    }
}
于 2013-06-14T16:13:17.900 回答
0

将 SteamFriends 类中的所有方法设为静态,然后使用类名从类名访问。你肯定会得到问题的解决方案。喜欢-:

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();..

干杯!...

于 2014-04-25T11:43:27.137 回答
-1

这是因为无参数构造函数的可访问性设置为内部更改:

internal SteamFriends()

public SteamFriends()
于 2013-06-13T10:37:26.780 回答