Trong cùng một giải pháp, tôi có hai dự án: P1 và P2. Làm cách nào để sử dụng lớp P1 trong P2?
Trong cùng một giải pháp, tôi có hai dự án: P1 và P2. Làm cách nào để sử dụng lớp P1 trong P2?
Câu trả lời:
Chỉ cần thêm tham chiếu đến P1 từ P2
Lưu ý rằng các loại trong P1 mà bạn muốn truy cập trực tiếp phải có đủ cấp độ truy cập: thông thường, điều này có nghĩa là chúng phải được đặt ở chế độ công khai.
Paul Ruane nói đúng, tôi vừa mới cố gắng xây dựng dự án. Tôi vừa tạo toàn bộ SLN để kiểm tra xem nó có hoạt động không.
Tôi đã thực hiện điều này trong VC # VS2008
<< (Chỉ giúp đỡ những người khác đọc được bài này bằng () bình luận)
Bước 1:
Tạo giải pháp có tên DoubleProject
Bước 2:
Tạo Dự án trong giải pháp có tên DoubleProjectTwo (để thực hiện việc này, hãy chọn tệp giải pháp, nhấp chuột phải -> Thêm -> Dự án mới)
Bây giờ tôi có hai dự án trong cùng một giải pháp
Bước 3:
Như Paul Ruane đã nói. đi đến các tham chiếu trong trình khám phá giải pháp (nếu đóng, nó nằm trong tab dạng xem của trình biên dịch). DoubleProjectTwo là chức năng / phương thức cần có của DoubleProject vì vậy trong DoubleProjectTwo tham chiếu chuột phải ở đó -> Thêm -> Dự án -> DoubleProject.
Bước 4:
Bao gồm chỉ thị cho không gian tên:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProject; <------------------------------------------
namespace DoubleProjectTwo
{
class ClassB
{
public string textB = "I am in Class B Project Two";
ClassA classA = new ClassA();
public void read()
{
textB = classA.read();
}
}
}
Bước 5:
Làm một cái gì đó cho tôi xem bằng chứng kết quả:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DoubleProject
{
public class ClassA //<---------- PUBLIC class
{
private const string textA = "I am in Class A Project One";
public string read()
{
return textA;
}
}
}
Chính
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProjectTwo; //<----- to use ClassB in the main
namespace DoubleProject
{
class Program
{
static void Main(string[] args)
{
ClassB foo = new ClassB();
Console.WriteLine(foo.textB);
Console.ReadLine();
}
}
}
Điều đó sẽ làm các trick
Hi vọng điêu nay co ich
EDIT ::: rất tiếc đã quên lệnh gọi phương thức để thực sự thay đổi chuỗi, đừng làm như vậy :)
Tất cả các nhà phát triển mới thường hỏi câu hỏi đơn giản này, đây là một vấn đề phổ biến đặc biệt với Visual Studio IDE. Rất ít người trả lời câu hỏi cụ thể và thường chỉ trích câu hỏi hoặc đưa ra "phỏng đoán" cho các giải pháp không trả lời được các vấn đề chung. Vấn đề phổ biến đầu tiên là IDE dẫn bạn đến việc tạo các dự án mới thay vì thêm các tệp mới (.java, .py, .cpp, .c) vào giải pháp hiện có (theo mặc định nó tạo ra một giải pháp mới) trừ khi bạn thay đổi tên dự án và thêm vào giải pháp hiện tại. Sự cố này xảy ra đối với các thư mục dự án Python, java, c #, C ++ và C.
Điều này không xảy ra khi bạn thêm một dự án khác bằng cách sử dụng lệnh new> project> project type của IDE. Vấn đề ở đây là dự án mới được lưu trữ trong một thư mục khác với các tệp mã giao diện Người dùng hoặc Máy khách hiện có. Để tạo một "tệp" mới trong cùng một không gian dự án thay vì dự án mới, người mới bắt đầu cần thực hiện những điều sau mà Microsoft sẽ không làm cho bạn và thậm chí đánh lừa bạn khỏi điều hiển nhiên trực quan theo mặc định.
NGAY BÂY GIỜ, các đề xuất mã để nhập thư viện hoặc sử dụng không gian tên sẽ hoạt động như được mô tả trong các nhận xét ở trên và bạn không phải thay đổi câu lệnh đường dẫn hoặc thay đổi đường dẫn giải pháp và tên giải pháp mà Microsoft sẽ không cho phép bạn thay đổi dễ dàng (tức là bạn có thể thay đổi tên tệp hoặc tên dự án nhưng IDE sẽ không tự động thay đổi đường dẫn dự án hoặc tên đường dẫn giải pháp).
Sau đây là một ví dụ Python nhưng hoạt động tương tự đối với C #, java hoặc C / C ++ bằng cách sử dụng không gian tên, bao gồm hoặc sử dụng lệnh mã thích hợp với từng ngôn ngữ để tìm mã trong các lớp / dự án khác trong KHÔNG GIAN HƯỚNG DẪN CÙNG.
Tệp ứng dụng "hello world" nhập từ các tệp mã khác trong cùng thư mục.
Lưu ý rằng các dấu phân tách khoảng trắng python sẽ không đúng khoảng cách trong trình chỉnh sửa nhận xét stackoverflow này:
print ("test")
from CIXMPythonFacade import ClassA
c1=ClassA
c1.methodA()
from CIXMPythonFacade import functionA
functionA()
class ClassName(object):
def __init__(object, parameter):
object.parameter = value
Tệp thư viện hoặc tệp "mặt tiền" chứa các lớp, phương thức hoặc hàm bạn muốn nhập.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
BÂY GIỜ bạn thực sự giải quyết mớ hỗn độn mà IDE dẫn bạn vào như thế nào? Để nhập mã từ tệp khác trong cùng không gian thư mục, bạn thêm một tham chiếu vào tệp đó.
OK, vậy bây giờ bạn đã giải quyết được vấn đề này, làm thế nào để bạn thực sự liên kết hai dự án riêng biệt với nhau trong cùng một không gian giải pháp?
Microsoft thực sự cần phải khắc phục những vấn đề này để bạn có thể trực quan tạo thứ mà hầu hết mọi người muốn tạo dưới dạng tệp mới trong cùng thư mục và xóa giải pháp bằng cách chọn chúng và xóa chúng khỏi IDE. Những người mới bắt đầu cảm thấy rất thất vọng với các câu lệnh về đường dẫn thư mục rất linh hoạt đối với các nhà phát triển dày dặn kinh nghiệm, nhưng lại không công bằng đối với các nhà phát triển mới về mặc định của họ.
Hy vọng điều này thực sự giúp ích cho các bạn mới và ngăn các nhà phát triển dày dạn đưa ra câu trả lời sai không phù hợp với bạn. Họ cho rằng bạn đã hiểu các câu lệnh về đường dẫn và chỉ muốn nhập đúng mã ... đó cũng là lý do tại sao đường hầm cố gắng sửa mã của bạn nhưng không giúp bạn khắc phục sự cố. Đây có lẽ là vấn đề phổ biến nhất được mô tả liên tục trên stackoverflow với các câu trả lời sai không hoạt động đối với các lập trình viên mới.
Bước đầu tiên là tạo P2 tham chiếu P1 bằng cách thực hiện như sau
Tiếp theo, bạn cần đảm bảo rằng các lớp trong P1 có thể truy cập P2. Cách đơn giản nhất là làm chúng public
.
public class MyType { ... }
Bây giờ bạn sẽ có thể sử dụng chúng trong P2 thông qua tên đủ điều kiện của chúng. Giả sử không gian tên của P1 là Project1 thì điều sau sẽ hoạt động
Project1.MyType obj = new Project1.MyType();
Tuy nhiên, cách ưa thích là thêm using for Project1
để bạn có thể sử dụng các loại mà không cần trình độ
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Nếu bạn có hai dự án trong một thư mục giải pháp, chỉ cần thêm Tham chiếu của Dự án vào một dự án khác. Sử dụng Không gian tên, bạn có thể nhận được các lớp. Trong khi Tạo đối tượng cho lớp được yêu cầu đó. Gọi Phương thức mà bạn muốn.
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Ở đây thêm tham chiếu đến Dự án thứ hai
Dự án thứ hai:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
Trong dự án P1, đặt lớp công khai (nếu chưa có). Sau đó, thêm tham chiếu dự án (thay vì tham chiếu tệp, một lỗi mà tôi thỉnh thoảng gặp phải) vào P2. Thêm câu lệnh using trong P2 vào đúng vị trí và bắt đầu sử dụng lớp từ P1.
(Đề cập đến điều này: Cách thay thế để công khai lớp học là đặt P2 làm bạn với P1. Tuy nhiên, đây không chắc là câu trả lời mà bạn đang theo đuổi vì nó sẽ gây ra một số hậu quả. Vì vậy, hãy kiên trì với gợi ý trên.)
Giả sử lớp của bạn trong dự án 2 được gọi là MyClass.
Rõ ràng, trước tiên hãy tham khảo dự án 2 của bạn dưới các tham chiếu trong dự án 1 sau đó
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
vì vậy bất cứ khi nào bạn muốn tham chiếu đến lớp đó, bạn gõ project2Class. Ngoài ra, hãy đảm bảo rằng lớp học đó cũng được công khai.
Tôi gặp sự cố với các khuôn khổ mục tiêu khác nhau.
Tôi đã làm mọi thứ đúng, nhưng không thể sử dụng tham chiếu trong P2. Sau khi tôi đặt cùng một khung mục tiêu cho P1 và P2, nó hoạt động như một sự quyến rũ.
Hy vọng nó sẽ giúp ích cho ai đó
The name ... does not exist in the current context. Cannot resolve symbol ...
cho đến khi tôi thay đổi khung mục tiêu của dự án để phù hợp. (Nhấp chuột phải vào dự án và chuyển Project -> Properties -> Target framework
đến để thay đổi điều này.)