类型''没有定义C#的构造函数

时间:2013-06-13 10:30:28

标签: c# constructor defined steambot

我正在尝试从另一个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 个答案:

答案 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()