Тип ' ' не имеет конструкторов, определенных C#

Я пытаюсь вызвать метод из другого файла 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 ];
        }
    }
}
}

person AustinGeorge    schedule 13.06.2013    source источник
comment
Попробуйте сделать конструктор public вместо internal   -  person Nolonar    schedule 13.06.2013


Ответы (4)


конструктор определен как внутренний. И поэтому он доступен только из той же сборки. Вероятно, этот конструктор предназначен только для вызова фабрикой? Действительно ли SteamFriends находится в том же проекте, что и HarvesterHandler?

person Manuel Amstutz    schedule 13.06.2013
comment
Учитывая название пространства имен, могу поспорить, что дело обстоит именно так. - person Gorpik; 13.06.2013
comment
О, подождите, нет, они не в одном проекте. То же решение, не тот же проект - person AustinGeorge; 13.06.2013
comment
Хорошо, есть проблема. Внутреннее видно только внутри той же сборки -> того же проекта - person Manuel Amstutz; 13.06.2013
comment
Возможно, у вас есть код в другом проекте, но вы случайно ссылаетесь на другую сборку, на которую ссылаетесь, вместо другого проекта? Посмотрите на свои ссылки - person Manuel Amstutz; 13.06.2013

Похоже, вы используете 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);
    }
}
person Andy♦    schedule 14.06.2013

сделать все методы статическими в классе 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();..

Ваше здоровье !..

person Somendra Tiwari    schedule 25.04.2014

Это связано с тем, что доступность конструктора без параметров установлена ​​на внутреннее изменение:

internal SteamFriends()

to

public SteamFriends()
person Thomas    schedule 13.06.2013
comment
Сомнительный ответ, конструктор SteamFriends, вероятно, был определен как internal по какой-то причине. - person Stefan; 13.06.2013